1

この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;
}
4

1 に答える 1

3

Arduinoボードには、ファイルを保存できる外部ストレージデバイスがありません。もちろん、デバイスに追加できるSDカードスロット付きのシールドがあります。しかし、これはやり過ぎでしょう。

ただし、ArduinoにはEEPROMが組み込まれており、EEPROMライブラリを使用して読み取り/書き込みを行うことができます。

私の提案は次のようになります:

  • プログラムを拡張して、を介してUSBの読み取りと書き込みを行いますSerial。次に、Arduinoに新しいパターンを送信できるいくつかの簡単なテキストベースのコマンドを考案できます。

  • Arduinoは新しいパターンを受信すると、それらをEEPROMに保存します。

  • 通常の動作モードでは、ArduinoはEEPROMからパターンを読み取り、それらを表示します。

このようにして、Arduinoの「スタンドアロン」使用し、任意のコンピューターを使用してアドホックにプログラムすることができます。

于 2012-09-02T09:17:17.657 に答える