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");
}
}
我设置了一个 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");
}
}