Возникла проблема с просыпанием по прерыванию камушка Attiny85. Нужно чтобы одновременно на пину PB2 работала кнопка и просыпался камушек от сна.
С Atmega328 все работает нормально, а вот с Attiny85 не хочет.
Если заливаю такой скетч кнопка работает но не просынаетса.
При добавлении двух строк (те что закоментированы в setup) в которых указываю пин для прерывания перестает работать кнопка.
С Atmega328 все работает нормально, а вот с Attiny85 не хочет.
Если заливаю такой скетч кнопка работает но не просынаетса.
При добавлении двух строк (те что закоментированы в setup) в которых указываю пин для прерывания перестает работать кнопка.
Скетч:
/*
Webasto = Mode2
TurboTimer = Mode3
*/
#define BTN_PIN 2
#include <GyverButton.h>
GButton butt1(BTN_PIN);
#include <GyverPower.h>
boolean Sleep = 0;
byte Mode = 0;
unsigned long Timer_to_Sleep;
void setup(){
// PCMSK = 0b00000100;
// GIMSK |= 0b00100000;
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
butt1.setDebounce(20);
butt1.setTickMode(AUTO);
attachInterrupt(0, isr, FALLING);
power.setSleepMode(POWERDOWN_SLEEP);
}
void isr() {
Timer_to_Sleep = millis();
// detachInterrupt(0);
// power.wakeUp();
}
void loop(){
if (butt1.isHold()) {
Mode = (butt1.getHoldClicks());
}
if (Mode == 2){ //Webasta
if (butt1.isHold()){
Timer_to_Sleep = millis();
digitalWrite(0, HIGH);
} else {
digitalWrite(0, LOW);
Mode = 0;
Sleep = 1;
}
} else if (Mode == 3){ //TurboTimer
if (butt1.isHold()){
Timer_to_Sleep = millis();
digitalWrite(1, HIGH);
} else {
digitalWrite(1, LOW);
Mode = 0;
Sleep = 1;
}
} else {
digitalWrite(0, LOW);
digitalWrite(1, LOW);
Mode = 0;
Sleep = 0;
}
if (Sleep == 1 || (Sleep == 0 && millis() - Timer_to_Sleep > 10000)){ //|| (Sleep == 0 && millis() - Timer_to_Sleep > 5000)
digitalWrite(1, HIGH);
digitalWrite(0, LOW);
Mode = 0;
Sleep = 0;
attachInterrupt(0, isr, FALLING);
power.sleep(SLEEP_FOREVER);
}
}
Изменено: