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 库读取/写入。

我的建议是:

  • 扩展您的程序以通过Serial. 然后,您可以发明一些简单的基于文本的命令,允许您向 Arduino 发送新模式。

  • 当 Arduino 接收到新模式时,它将它们存储在 EEPROM 中。

  • 在正常操作模式下,Arduino 从 EEPROM 读取模式并显示它们。

通过这种方式,您可以使用您的 Arduino“独立”使用任何计算机对其进行临时编程。

于 2012-09-02T09:17:17.657 回答