在对 Stack Overflow 和 Google 进行了一些研究之后,我对 Arduino 的时间管理有很多疑问,所以我决定向你寻求帮助。
目标是在“void loop()”内创建一个 switch case 循环,该循环执行某个子例程一段时间(例如,三分钟)。我想到的伪代码是:
void setup() {
Serial.begin(9600);
Serial.println("Waiting for command");
}
void loop() {
// This is where the "polling" occurs
if(Serial.available()){
char ch=Serial.read();
switch(ch)
{
case '1':
// do something
break;
case '2':
//do something
break;
case '3':
void Tempfunct();
break;
default:
Serial.print(ch);
Serial.println(" : unknown command!");
}
}
}
// Function to be called
void Tempfunct() {
//Do something for 3*60*60*1000 s and return to switch case selection
}
我认为这个解决方案是一个起点,因为我认为涉及中断的解决方案会是一个更好的解决方案。具体来说,我期望这样的伪代码:
void setup() {
Serial.begin(9600);
Serial.println("Waiting for command");
}
void loop() {
// This is where the "polling" occurs
if(Serial.available()){
char ch=Serial.read();
switch(ch)
{
case '1':
// Do something
break;
case '2':
// Do something
break;
case '3':
void Tempfunct();
break;
default:
Serial.print(ch);
Serial.println(" : unknown command!");
}
}
}
// Function to be called
void Tempfunct() {
//Do something until an interrupt condition is received
//from Serial (such a key pressed by user) and then
//return to switch case selection.
}
我该怎么做?
对我来说,这种情况就像在一个“案例”内部有一种“测量回路”。当 Arduino 收到预设的“开始键”(开始字符)时,它开始测量。当用户按下串行监视器(或超级终端)中的另一个按钮时,它会向 Arduino 发送一个预设的“停止键”(停止字符):Arduino 感觉就像有一个外部中断,停止测量并返回 void loop(){...} 循环。