Kurs Arduino #19: Oszczędzanie energii

Kurs Arduino #19: Oszczędzanie energii

3. Podstawowe funkcje

Od razu mówię, żeby przy tym punkcie zatrzymać się na chwilę i zrozumieć jak działają dane funkcje. Jest to bardzo ważne, ponieważ później w programach może być problem z ich implementacją. Funkcje nie są trudne, ale warto poświęcić im chwilę ;)

Importowanie biblioteki:
Tutaj akurat nie ma nic trudnego:

Następnie jeżeli korzystamy z usypania/wybudzania w trybie zewnętrznego przerwania to w funkcji startowej setup, musimy zamieścić informację, że będziemy korzystać z pinu 2 (INT0) lub 3 (INT1):

Następnie musimy utworzyć „metodę” wyjścia z danego trybu, jeżeli korzystamy z zewnętrznych przerwań:

Ważnym jest aby pamiętać, że attachInterrupt ma wysoki priorytet w związku z czym zostanie on wykonany poza kolejnością działania programu.

attachInterrupt musi się zawsze znajdować przed przed funkcją zmiany trybu zasilania (jak mikrokontroler przejdzie w Power-down i po tym trybie będzie dopiero attachInterrupt to nie zadziała)
Do obsługi zewnętrznego przerwania będziemy potrzebować jeszcze funkcji detachInterrupt() aby nie powstały jakieś sprzeczne „komendy” takie jak np. dwukrotne wejście/wyjście z danego stanu:

Teraz możemy przedstawić dostępne tryby zasilania oraz sposób ich konfigurowania:

W miejsce czas oraz X wstawiamy jedną z następujących opcji:

Czas: X:
  • SLEEP_15MS,
  • SLEEP_30MS,   
  • SLEEP_60MS,
  • SLEEP_120MS,
  • SLEEP_250MS,
  • SLEEP_500MS,
  • SLEEP_1S,
  • SLEEP_2S,
  • SLEEP_4S,
  • SLEEP_8S,
  • SLEEP_FOREVER
  • ON
  • OFF

Czas począwszy od 15ms do 8s oraz SLEEP_FOREVER, czyli pozostanie w danym stanie „na zawsze” do momentu nastania przerwania. Przy pomocy ON/OFF wybieramy, które peryferia w danym stanie mają pozostać uruchomione.

Przedstawione powyżej stany są przeznaczone dla mikrokontrolerów o modelu 168, 328P, 32U4, 2560 i 256RFR2
Tryb Idle dla ATMega2560, 256RFR2, 32U4
ATMega2560:
ATMega256RFR2:
ATMega32U4:

Może wydaje się to skomplikowane, ale w rzeczywistości takie nie jest. Musimy tylko wybierać odpowiedni dla nas tryb po czym przypisać mu odpowiednie dla nas peryferia i czas działania. Nie ma możliwości, że układ się „zawiesi” bo wyłączyliśmy mu w danym trybie dane peryferia.

I to już tak na prawdę wszystko. Pozostaje nam teraz wprowadzić te funkcje w życie.