2

私はTimerOne ライブラリを使用して作業しています。コードを以下に示します。

#include <TimerOne.h>

void setup() {
    Serial.begin(9600);
    pinMode(13, OUTPUT);    
    Serial.println();
    Timer1.initialize(1000000); // set a timer of length 1000000 microseconds
    Timer1.attachInterrupt(timerIsr); // attach the service routine here
}

void loop() {
    Serial.println(millis());
}

void timerIsr() {
    Serial.print("FROM Time1: ");
    Serial.println(millis());
}

問題は、いくつかのループの後 (ループ() のミリ秒が 930 を返すとき)、arduino が停止することです。

問題は、arduinoがループを実行していて、シリアルポートに書き込むときに、ISRルーチンも書き込みをしていることだと思います。どうすればこの問題を解決できますか?

私は変更を試みます:

Serial.print("FROM Time1: ");
Serial.println(millis());

に:

digitalWrite(13, !digitalRead(13));

正常に動作します。arduino のシリアル ライブラリには、割り込みを使用するときに問題があると思います。可能ですか?

コードのブロックでarduinoをブロックする方法はあります.atomicを使用しようしましたが、うまくいきませんでした.

Arduino UNO (ATmega328) を使用しています。

4

2 に答える 2