Я работаю с библиотекой 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());
}
Проблема в том, что после некоторых циклов (когда millis из loop() возвращает 930), ардуино останавливается.
Я думаю, что проблема в том, что когда Arduino запускает цикл и записывает в последовательный порт, процедура ISR тоже пишет. Как я могу решить эту проблему?
Я пытаюсь изменить:
Serial.print("FROM Time1: ");
Serial.println(millis());
by:
digitalWrite(13, !digitalRead(13));
И работает нормально, я думаю, что у библиотеки Serial arduino есть некоторые проблемы при использовании прерываний, это возможно?
Есть любой способ заблокировать Arduino в каком-то блоке кода, я пытаюсь использовать atomic и не сработало.
Я использую Arduino UNO (ATmega328)