Stack Overflow と Google で調査した結果、Arduino での時間管理について多くの質問がありました。そのため、あなたに助けを求めることにしました。
目標は、特定のサブルーチンを特定の時間 (たとえば 3 分間) 実行する "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.
}
どうすればいいですか?
私にとって、この状況は、「ケース」の 1 つの中に一種の「測定ループ」があるようなものです。Arduinoはあらかじめ設定された「スタートキー」(スタート文字)を受け取ると計測を開始します。ユーザーがシリアル モニター (またはハイパー ターミナル) で別のボタンを押すと、プリセットの「ストップ キー」(停止文字) が Arduino に送信されます。Arduino は外部割り込みが発生したように感じ、測定を停止して void に戻ります。 loop(){...} サイクル。