Arduino MsTimer2 任意のタイミングでStartする方法について


Arduino初心者  2021-07-07 09:09:52  No: 149788  IP: 192.*.*.*

現在、Arduinoを用いたプログラミングの練習をしています。
ArduinoとPC(Python)をUSB接続し、PC側から合図を送った後、一定時間ごとに文字列を出力するプログラムを作成しています。
内容として、合図を読み取ったタイミングでスタートし、今回のプログラムでは合図を読み取ったちょうど1秒後に最初に文字列を出力し、その後1秒毎に文字列を出力したいと考えています。

私は最初、setup()内のMsTimer2::start();をloop内に記載すればいいのではないかと考えましたが、上手く動作しませんでした。おそらくMsTimer2の仕様だと思います。
改良した以下のプログラムでは、合図の後に文字列を送信することはできました。しかし、毎回指定した時間後に出力されるとは限らないのでは?と考えました。
今回は非常に簡単なプログラムですが、今後はモーター制御などに応用したいと考えています。PythonよりもArduinoのほうが時間計測が正確であること、ほかの手段であるdelayはその間処理ができなくなることを学んだため、今後のことを考慮し、ArduinoでMsTiemr2を使用しようと考えました。
まだまだ勉強中で知らないことも多いのですが、もし改善方法をご存じの方がいましたら、ご教授いただければ幸いです。
よろしくお願いいたします。


以下プログラムです。(シリアルモニタにて、改行なしで" s; "と入力すれば実行されます)

#include <MsTimer2.h>

int key = 0;
String flag;

void setup() {
  Serial.begin(115200);

  MsTimer2::set(1000, timerFire);
  MsTimer2::start();
}

void timerFire() {
  if (key==1) {
    Serial.println("hello");
  }
}

void loop() {
  if (key==0) {
    if (Serial.available()>0) {
      flag = Serial.readStringUntil(';');
      if (strcmp(flag.c_str(), "s")==0) {
        key = 1;
      }
    }
  }
}

編集 削除