Добрый день. Прошу помощи. Не могу разбудить Attiny85 по INT0.
Суть задачи: Attiny85 асинхронно мигает несколькими диодами заданное количество раз. После каждого цикла уменьшается счётчик, и при достижении нуля Attiny засыпает. Проснуться она должна по высокому уровню на PB2 (INT0) от ПИР датчика AM312. Засыпать то засыпает, а вот обратно не просыпается. Подскажите где ошибка?
Суть задачи: Attiny85 асинхронно мигает несколькими диодами заданное количество раз. После каждого цикла уменьшается счётчик, и при достижении нуля Attiny засыпает. Проснуться она должна по высокому уровню на PB2 (INT0) от ПИР датчика AM312. Засыпать то засыпает, а вот обратно не просыпается. Подскажите где ошибка?
код PWR_DWN для Attiny85:
#include <avr/sleep.h>
int ledPin = 1; // LED
int interruptPin = 2; // пин INT0
volatile byte cikl; // счётчик цикла
void setup(){
pinMode(ledPin, OUTPUT); // пин с LED
pinMode(interruptPin, INPUT); // пин прерывания, подтянут к земле на AM312 и меняется на высокий при наличии движения
digitalWrite(ledPin, LOW);
cikl = 3; // стартовое число циклов
}
void sleepNow(){
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // режим PWR_DOWN
sleep_enable(); // разрешаем сон
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptFunc, RISING); // при изменении сигнала с LOW на HIGH
sleep_mode(); // засыпаем
}
void interruptFunc (){
//РОТА ПОДЪЕМ!!!
cikl = random (7,20); // псевдо random назначение кол-ва доп циклов
}
void loop(){
// по кругу исполняется длинный цикл пока счётчик "cikl" > 0
if (cikl>0) {cikl--; // имитация цикла
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
delay(300);
}
if (cikl==0){ sleepNow(); } // засыпаем до прерывания
}