Cześć, mam problem z przerwaniami w moim Leonardo-za każdym razem gdy próbowałem wybudzać arduino z trybu niskiego poboru energii(Biblioteka LowPower) Arduino kompletnie nie reagowało na przerwanie .
Robiłem to zgodnie z poradnikiem(kod z poradnika też nie działa tak jak powinien):
http://feriar-lab.pl/kurs-arduino-oszcze...energii/4/
Mój kod(Dopisałem kilka przerwań tak żeby sprawdzić czy inne działają, ale dalej nic..):
Proszę, pomóżcie mi zweryfikować czy problem jest w kodzie czy może mam uszkodzone arduino.
Wejście za każdym razem było podciągnięte do 5V przy pomocy rezystora.
Pozdrawiam ;]
Robiłem to zgodnie z poradnikiem(kod z poradnika też nie działa tak jak powinien):
http://feriar-lab.pl/kurs-arduino-oszcze...energii/4/
Mój kod(Dopisałem kilka przerwań tak żeby sprawdzić czy inne działają, ale dalej nic..):
Proszę, pomóżcie mi zweryfikować czy problem jest w kodzie czy może mam uszkodzone arduino.
Wejście za każdym razem było podciągnięte do 5V przy pomocy rezystora.
Pozdrawiam ;]
Kod:
#include <LowPower.h>
int odliczanie = 5;
void setup()
{
pinMode(0, INPUT); //Jeden przycisk podciągnięty do plusa przez 1.2K
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(7, INPUT);
Serial.begin(9600); //ustaw transmisję UART na 9600 baud
}
void loop()
{
while(!Serial);
{ //odliczanie czasu
Serial.print("Ide spac za: ");
Serial.println(odliczanie);
odliczanie--; //dekrementujemy (zmniejszamy) zmienną odliczanie o 1
delay(1000); //ustawiamy opóźnienie 1 sekundy
}
if (odliczanie <= 0) { //jeżeli zmienna odliczanie jest mniejsza równa 0
Serial.println("Spie..."); //wyślij informację na UART, że układ przechodzi w stan snu
delay(100); //odczekaj 0,1 sekundy na wyświetlenie informacji
odliczanie = 5; //ustaw zmienną odliczanie na 5, aby po przebudzeniu można było
//wykonywać odliczanie
Spanie(); //przenieś wykonywanie programu do klasy Spanie
}
}
void Spanie()
{
attachInterrupt(0, budzenie, LOW); //jeżeli na pinie 2 pojawi się stan niski to wybudź ATMegę
attachInterrupt(1, budzenie, LOW); //i przenieś do klasy budzenie
attachInterrupt(2, budzenie, LOW);
attachInterrupt(3, budzenie, LOW);
attachInterrupt(6, budzenie, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
//wybieramy tryb Power-down i ustawiamy żeby ATMega spała
//cały czas spała przy wyłączonom ADC i BoD do momentu wystąpienia
//przerwania
}
void budzenie()
{
detachInterrupt(0);
detachInterrupt(1);
detachInterrupt(2);
detachInterrupt(3);
detachInterrupt(6);//ustawiamy debounce pinu 2, żeby układu nie "wybudził się" dwa razy
Serial.println("Nie spie ;)"); //wyślij informację na UART o wybudzeniu
}