Arduino timed void draw()循环

时间:2015-06-19 16:45:15

标签: c++ loops arduino draw

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

这个练习的目的是了解如何在无尽的绘制循环中插入一个中断。我仍然是编程的新手,我正试图围绕命令如何与其他人进行交互。任何人都可以帮助我了解如何使这项工作? Eample代码会很棒,但我也会对它应该如何工作的概念性描述感到满意......通过实践和所有方法进行学习。

我已经尝试将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

2 个答案:

答案 0 :(得分:0)

如果您不担心真正的时间紧迫,那么简单的解决方案就是使用延迟功能。 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
}

答案 1 :(得分:0)

我相信你所寻找的东西被称为“状态机”。

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

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

相关问题