2012-09-02 5 views
1

이 arduino 스케치를 만들었고 제대로 작동합니다. 버튼을 누르고 있으면 조명 패턴이 재생됩니다. 내 패턴을 하단에서 볼 수 있습니다. 각 버튼은 홀드 할 때 연주 할 자체 패턴을 가지고 있습니다.Arduino 보드에 일반 텍스트로 스케치 용 Arduino 데이터를 저장할 수 있습니까?

이렇게 잘 작동하지만 질문이 있습니다. 프로그램 외부에서 패턴을 유지하는 것이 더 나은 방법이라고 생각하기 때문에 이에 대해 불안합니다. Arduino에로드되는 텍스트 파일에 패턴을 저장할 수 있습니까? 어쨌든 패턴을 텍스트 파일에 넣고 arduino에 모든 것을 읽어 주시겠습니까?

const int buttonPin[5] = {8,9,10,11,12}; 
const int LEDPin[5] = {2,3,4,5,6}; 
int timer =0; 
int millisBegin=0; 
boolean reset=true; 
boolean run[5] = {false,false,false,false,false}; 
boolean buttonOn = false; 


void setup(){ 
    Serial.begin(57600); 
    pinMode(buttonPin[0], INPUT); 
    pinMode(buttonPin[1], INPUT); 
    pinMode(buttonPin[2], INPUT); 
    pinMode(buttonPin[3], INPUT); 
    pinMode(buttonPin[4], INPUT); 

    pinMode(LEDPin[0], OUTPUT); 
    pinMode(LEDPin[1], OUTPUT); 
    pinMode(LEDPin[2], OUTPUT); 
    pinMode(LEDPin[3], OUTPUT); 
    pinMode(LEDPin[4], OUTPUT); 
} 


void loop() 
{ 
    for (int x=0; x<6; x++) 
    { 
     if (digitalRead(buttonPin[x]) == HIGH) 
     { 
      run[x] = true; 
     } 
    } 
    if (run[0] == true) 
    { 
     buttonOn = pattern1(); 
     if (buttonOn == false) 
     { 
      run[0] = false; 
     } 
    } 

    if (run[1] == true) 
    { 
     buttonOn = pattern2(); 
     if (buttonOn == false) 
     { 
      run[1] = false; 
     } 
    } 

    if (run[2] == true) 
    { 
     buttonOn = pattern3(); 
     if (buttonOn == false) 
     { 
      run[2] = false; 
     } 
    } 

    if (run[3] == true) 
    { 
     buttonOn = pattern4(); 
     if (buttonOn == false) 
     { 
      run[3] = false; 
     } 
    } 

    if (run[4] == true) 
    { 
     buttonOn = pattern5(); 
     if (buttonOn == false) 
     { 
      run[4] = false; 
     } 
    } 
} 


boolean light(int button, int pattern[][6]) 
{ 
    while (digitalRead(buttonPin[button])==LOW) 
    { 
     reset = true; 
     for (int x=0; x<5; x++){ 
      digitalWrite(LEDPin[x],LOW); 
     } 
     buttonOn = false; 
     return buttonOn; 
    } 

    while (digitalRead(buttonPin[button])==HIGH) 
    { 
     if (reset == true) 
     { 
      millisBegin = millis(); 
      reset = false; 
      Serial.println("reset!"); 
     } 
     timer = millis() - millisBegin; 

     for (int x=0; x<10; x++) //Pattern amount 
     { 
      for (int y=0; y<5; y++) //Lights 
      { 
       //if else runs pattern with correct time code 
       if (timer>pattern[x][5]&&timer<pattern[x+1][5]) 
       { 
        if (pattern[x][y]==1) 
        { 
         digitalWrite(LEDPin[y], HIGH); 
        } 
        else 
        { 
         digitalWrite(LEDPin[y], LOW); 
        } 
       } 
      } 
     } 
     Serial.println(timer); 

     if (timer > pattern[10][5]){ 
      reset = true; 
      Serial.println("Over timer!"); 
     } 
    } 
} 


boolean pattern1() 
{ 
    int pattern[11][6] = { 
     {0, 0, 0, 0, 0, 100}, //0 
     {1, 1, 0, 1, 1, 1200}, //1 
     {0, 0, 1, 0, 0, 2200}, //2 
     {1, 1, 0, 1, 1, 3200}, //3 
     {0, 0, 0, 0, 0, 4200}, //4 
     {1, 1, 1, 1, 1, 5000}, //5 
     {0, 0, 1, 0, 0, 6000}, //6 
     {1, 0, 0, 0, 0, 7000}, //7 
     {0, 1, 0, 1, 1, 8000}, //8arduin 
     {0, 0, 1, 0, 1, 9000}, //9 
     {0, 0, 0, 0, 0, 10000}}; // 

    buttonOn = light(0,pattern); 
    return buttonOn; 
} 

boolean pattern2() 
{ 
    int pattern[11][6] = { 
     {1, 0, 1, 0, 0, 100}, //0 
     {0, 1, 1, 0, 1, 180}, //1 
     {1, 0, 0, 0, 0, 230}, //2 
     {0, 1, 0, 1, 1, 340}, //3 
     {1, 0, 0, 1, 0, 450}, //4 
     {0, 0, 1, 1, 1, 500}, //5 
     {0, 0, 1, 0, 0, 550}, //6 
     {1, 0, 0, 0, 0, 600}, //7 
     {0, 1, 0, 1, 1, 680}, //8 
     {0, 0, 1, 0, 1, 800}, //9 
     {0, 0, 0, 0, 0, 900}}; // 

    buttonOn = light(1,pattern); 
    return buttonOn; 
    } 

boolean pattern3() 
{ 
    int pattern[11][6] = { 
     {1, 1, 1, 1, 1, 100}, //0 
     {0, 0, 0, 0, 0, 180}, //1 
     {1, 1, 1, 1, 1, 230}, //2 
     {0, 0, 0, 0, 0, 340}, //3 
     {1, 1, 1, 1, 1, 450}, //4 
     {0, 0, 0, 0, 0, 500}, //5 
     {1, 1, 1, 1, 1, 550}, //6 
     {0, 0, 0, 0, 0, 600}, //7 
     {1, 1, 1, 1, 1, 680}, //8 
     {0, 0, 0, 0, 0, 800}, //9 
     {0, 0, 0, 0, 0, 810}}; // 

    buttonOn = light(2,pattern); 
    return buttonOn; 
} 

boolean pattern4() 
{ 
    int pattern[11][6] = { 
     {0, 0, 0, 0, 0, 100}, //0 
     {0, 0, 0, 0, 1, 500}, //1 
     {0, 0, 0, 1, 1, 800}, //2 
     {0, 0, 1, 1, 1, 900}, //3 
     {1, 1, 1, 1, 1, 1000}, //4 
     {1, 1, 1, 1, 1, 1100}, //5 
     {1, 1, 1, 1, 0, 1200}, //6 
     {1, 1, 1, 0, 0, 1300}, //7 
     {1, 1, 0, 0, 0, 1400}, //8 
     {1, 0, 0, 0, 0, 1500}, //9 
     {0, 0, 0, 0, 0, 1600}}; // 

    buttonOn = light(3,pattern); 
    return buttonOn; 
} 

boolean pattern5() 
{ 
    int pattern[11][6] = { 
     {0, 1, 0, 1, 0, 100}, //0 
     {1, 0, 1, 0, 1, 500}, //1 
     {0, 1, 0, 1, 0, 800}, //2 
     {1, 0, 1, 0, 1, 900}, //3 
     {0, 1, 0, 1, 0, 1000}, //4 
     {1, 0, 1, 0, 1, 1100}, //5 
     {0, 1, 0, 1, 0, 1200}, //6 
     {1, 0, 1, 0, 1, 1300}, //7 
     {0, 1, 0, 1, 0, 1400}, //8 
     {1, 0, 1, 0, 1, 1500}, //9 
     {0, 1, 0, 1, 0, 1600}}; // 

    buttonOn = light(4,pattern); 
    return buttonOn; 
} 
+0

나는 대답을 추가하려고했으나 1 년이 넘었다는 것을 깨달았습니다. 그래서 다음 사람을 도와 줄 빠른 발언을 생각했습니다. A.H.의 답변은 좋은 해결책 이었지만, 질문의 맥락에서, 나에게는 명백 함이 간과되었습니다. 'PROGMEM' 하드 코딩 된 것, 변경되지 않은 (재 컴파일없이) AH의 대답이 덜 유연한 것, 프로그램 메모리를 사용하는 것은 실용적인 옵션이며 오늘날의 마이크로에서는 프로그램 메모리가 EEPROM보다 훨씬 크고 훨씬 클 수 있습니다. – Madivad

답변

3

Arduino 보드에는 파일을 저장할 수있는 외부 저장 장치가 없습니다. 물론 장치에 추가 할 수있는 SD 카드 슬롯이있는 방패가 있습니다. 그러나 이것은 잔인 할 것입니다.

하지만 Arduino에는 EEPROM 라이브러리를 사용하여 읽고 쓸 수있는 내장 EEPROM이 있습니다.

나의 제안은 다음과 같습니다

  • 읽고 Serial을 통해 USB에 쓸 수있는 프로그램을 확장 할 수 있습니다. 그런 다음 Arduino에 새로운 패턴을 보낼 수있는 간단한 텍스트 기반 명령을 만들 수 있습니다.

  • Arduino가 새로운 패턴을 수신하면이를 EEPROM에 저장합니다.

  • 정상적인 작동 모드에서 Arduino는 EEPROM에서 패턴을 읽고 표시합니다.

이 방법 당신은 당신의 아두 이노 "독립"컴퓨터를 사용 프로그램이 임시을 사용할 수 있습니다.

관련 문제