• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Brak przerwań, biblioteka Low-Power
#1
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 ;]

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
}
 
Odpowiedź
#2
Leonardo nie ma obsługi zewnętrznych przerwań na wszystkich pinach (a przynajmniej nie bez pcint). Próbujesz wybudzać na pinie, który ją ma?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości