Идей нет… я пас. Надо глубже погружаться и в библиотеку. и в этот конкретный МК.
Да, вот так работает:
void loop() {
if (ir.available()) {
Serial.println(ir.readData(), HEX);
}
else {
delay(10);
}
}
Работает:
void loop() {
if (ir.available()) {
Serial.println(ir.readData(), HEX);
}
else {
delay(0);
}
}
Работает:
void loop() {
static uint8_t i;
if (ir.available()) {
Serial.println(ir.readData(), HEX);
}
else {
i++;
}
}
Теперь пытаюсь понять почему именно в этом месте нужна задержка. Чтобы избавиться от некрасивого молдавского партизана “else”.
я думаю это бесполезная трата времени, хотя мне кажется что я где то читал что там явно об этом говорили, если нет желания оставлять загадку предкам, типа такой
void loop() {
if (ir.available()) {
uint32_t data = ir.readData();
Serial.println(data, HEX);
PORTA.OUTTGL = PIN7_bm;
}
// Универсальная пауза для всех состояний
delay(1); // Снижает частоту опроса с ~100kHz до ~1kHz(но это не точно)
}
чтоб потомки гадали что там и зачем, ставьте ЕвгенийП что вопрос решен, и ищите новую аномалию))) а то скучно…
Смотрите. У Вас available проверяет внутреннюю переменную _ready. Изменяется она в обработчике прерывания (в функции tick()). Но при этом она ни разу не volatile (посмотрите исходник библиотеки). Вот отсюда и приключения на одно место.
5 лайков
Гайвер как всегда