Arduino 定时 void draw() 循环

Arduino timed void draw() loops

我设置了一个 Arduino Uno 来感应光线水平,并在天黑时通过 Processing 绘制到文本文件。我想修改处理代码以中断绘制循环五秒钟,然后重新启动绘制循环。这将不断地写入和覆盖 .txt 文件,但现在这并不重要。

本练习的目的是了解如何在无限绘制循环中插入中断。我仍然是编程的新手,并且正在努力了解命令如何与其他命令交互。谁能帮助我了解如何进行这项工作?示例代码会很棒,但我也很乐意对它应该如何工作的概念性描述......边做边学。

我试过将 void draw() 循环放在 void loop() 中,但它出错了。我走的路对吗?

<setup...mySerial and createWriter to path/file.txt>{
}

void draw() { //this is what needs to terminate & restart
if (mySerial.available() > 0 ) {
String value = mySerial.readString();
if ( value != null ) {
output.println( value );
}
}
}

void keyPressed and end

如果您不担心时间紧迫,简单的解决方案是使用延迟功能。 http://www.arduino.cc/en/Reference/Delay

以下可能是一个简单的草图,可以满足您的要求。根据需要进行调整。

void setup()
{
  Serial.begin(9600); // initialize serial routines
}

void loop()
{
int a = analogRead(0);  // read the value of lightness
  Serial.println(a);      // tell processing what the value is
  delay(5000);          // wait for a 5 seconds
}

我相信你要找的是 "state machine"。

创建一个可用于存储时间值的变量,然后将其与当前时间进行比较以查看是否已过去 5 秒。

uint32_t last_trigger = 0; // millis() returns an unsigned, 32-bit integer

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    if (millis() - last_trigger > 5000) { // 5000 milliseconds
        last_trigger = millis(); // update last_trigger
        Serial.print("last triggered at "); // report findings
        Serial.print(last_trigger);
        Serial.println(" milliseconds");    
    }
}

http://www.arduino.cc/en/Reference/Millis