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:
|
1 |
#include "LowPower.h" |
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):
|
1 2 3 |
pinMode(pinPrzerwan, INPUT); pinPrzerwan- pin 2 albo 3 |
Następnie musimy utworzyć „metodę” wyjścia z danego trybu, jeżeli korzystamy z zewnętrznych przerwań:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
attachInterrupt(pin_przerwania, klasa, sposob_wyzwolenia_przerwania); //pin_przerwania, tutaj wpisujemy: // * 0 jeżeli nasz pin przerwań to 2, // * 1 jeżeli nasz pin przerwań to 3 //klasa- klasa do której ma przejść program po zaistnieniu przerwania //sposob_wyzowolenia_przerwania- sposób w jaki nasze przerwania zostanie wykryte: // * LOW - kiedy stan na pinie będzie niski -> podłączony do GND // * CHANGE - kiedy stan na pinie się zmieni, bez znaczenia czy L -> H czy z H -> L // * RISING - kiedy pin będzie przechodzi ze stanu niskiego do wysokiego (zboczem narastającym) // * FALLING - kiedy pin będzie przechodził ze stanu wysokiego do niskiego (zbocze opadające) |
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.
|
1 2 3 |
detachInterrupt(nr_pinu); // nr_pinu- numer pinu przerwań 0 albo 1 (taki sam jak w attachInterrupt) |
Teraz możemy przedstawić dostępne tryby zasilania oraz sposób ich konfigurowania:
|
1 2 3 4 5 6 7 8 9 10 11 |
LowPower.idle(czas, ADC_X, TIMER2_X, TIMER1_X, TIMER0_X, SPI_X, USART0_X, TWI_X); //TYLKO DLA MODELU 328P i 168 LowPower.adcNoiseReduction(czas, ADC_X, TIMER2_X); LowPower.powerDown(czas, ADC_X, BOD_X); LowPower.powerSave(czas, ADC_X, BOD_X, TIMER2_X); LowPower.powerStandby(czas, ADC_X, BOD_X); LowPower.powerExtStandby(czas, ADC_X, BOD_X, TIMER2_X); |
W miejsce czas oraz X wstawiamy jedną z następujących opcji:
| Czas: | X: |
|
|
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.
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.