是否可以在Arduino上以纯文本格式存储草图的Arduino数据?

时间:2012-09-02 04:57:39

标签: 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;
}

1 个答案:

答案 0 :(得分:3)

Arduino主板没有可存储文件的外部存储设备。当然,有一些带有SD卡插槽的防护罩可以添加到您的设备中。然而,这将是过度的。

但Arduino有一个内置EEPROM,您可以使用EEPROM库进行读/写。

我的建议是:

  • 将程序扩展为通过Serial读取和写入USB。然后,您可以创建一些简单的基于文本的命令,这些命令允许您将新模式发送到Arduino。

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

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

通过这种方式,您可以使用任何计算机临时使用Arduino“独立”程序。