• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:arduinoでのシリアル通信速度の影響)

arduinoでのシリアル通信速度の影響

このQ&Aのポイント
  • arduinoでのシリアル通信速度の設定がカウント速度に影響を与える問題について
  • MsTimerを使ってカウントするプログラムでシリアル通信を行うと速度が遅くなってしまう
  • 初めてarduinoを使用し、C言語にもほとんど経験がないため、この問題の解決方法を知りたい

質問者が選んだベストアンサー

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.2

No.1補足 func() の処理時間を計る場合、MsTimer2 を使用せず func()を通常関数としてコールし micros()  の func() 実行前、実行後の時間差で処理時間がわかります (1mS割り込みでないので出力データは無意味) 実際はfunc()を100回単位で実行し平均化します 、micros() 関数のカウントアップ割り込みがある為 micros()  参照 http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2531

hk-sulo
質問者

お礼

お礼が遅くなってすみません。 micros()を使うのですね。やってみます! なお、アドバイスいただいたプログラムは1000msごとの割り込みにすることで、ひとまずは動きました。 ありがとうございました!

その他の回答 (1)

  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.1

func() は割り込み処理です、1mS以下で処理を完了しないと、次のfunc()割り込み処理に間に合いません シリアル通信9600bpsでは、1秒間に9600ビットー約960バイトしかシリアル出力できません (1mSで1文字程度) 時間のかかるシリアル出力は、メイン loop() 側 で処理して、割り込み処理を短時間にする必要があります。 (シリアル出力バッファの有無、出力バッファオーバーフローの処理によってシリアル出力処理時間は変化します)

hk-sulo
質問者

お礼

早々にありがとうございます。 1msで1文字程度、、そうなのですね。 ちなみに割り込み処理がどれくらいの時間がかかっているかをモニターする方法はあるのでしょうか。 条件分岐とインクリメントだけで1msを超えるようだと、そもそもこのプログラムでは間隔を制御するのが難しいように思えてきました。。 モニターする方法がなければ、例えば1000msごとに呼び出したほうが良さそうですね。