Spisu treści:

Arduino - okresowe przerwanie: 4 kroki
Arduino - okresowe przerwanie: 4 kroki

Wideo: Arduino - okresowe przerwanie: 4 kroki

Wideo: Arduino - okresowe przerwanie: 4 kroki
Wideo: Programowanie sterowników Ethernet w Linuksie - Semihalf Barcamp, 20/05/2015 2024, Lipiec
Anonim
Arduino - okresowe przerwanie
Arduino - okresowe przerwanie

Ten Instruktaż dotyczy używania okresowego przerwania do odmierzania czasu w programach Arduino. To krok dla początkującego programisty Arduino, który wie, że Arduino może więcej, ale nie do końca wie, jak to zrobić.

Jeśli występuje problem z wydajnością, zakładam, że używasz jednej lub więcej funkcji delay(). Sztuczka polega na pozbyciu się funkcji delay() i zastąpieniu przerwania. Funkcja delay() wymusza na Arduino nicnierobienie podczas oczekiwania na zakończenie funkcji delay(). Użycie przerwania pozwala programowi na wykonywanie innych czynności podczas oczekiwania na koniec opóźnienia. Zwykle istnieje ogromna ilość niewykorzystanego czasu martwego, który można wykorzystać na inne rzeczy podczas korzystania z funkcji delay(). Użycie przerwania rozwiązuje ten problem.

Krok 1: Obsługa przerwań

1. Dodaj obsługę przerwań do swojego programu. Po prostu skopiuj i wklej gdzieś powyżej setup();

const unsigned long TIMER0_COUNT = 500; // Interwał timera 500 ms

// TIMER0 obsługa przerwań volatile bool time = false; ISR(TIMER0_COMPA_vect) { static unsigned long count = 0; if (++liczba > TIMER0_COUNT) { ilość = 0; czas = prawda; // czas jest ustawiany na true co TIMER0_COUNT ms } // (czas musi być wyczyszczony w głównej procedurze) }

Krok 2: Ustaw okresowy przedział czasu

2. Ustaw interwał czasowy. Ta procedura łączy się z przerwaniem TIMER0, które jest ustawione na uruchamianie co ~1 ms.

Twój „interwał” to liczba przerwań TIMER0 do przetworzenia. Każdy interwał wynosi ~1 ms, więc tak naprawdę ustawiasz, ile przerwań TIMER0 ma zliczyć przed aktywacją interwału. IOW, ustaw zmienną TIMER0_COUNT na tyle milisekund, ile chcesz czekać. Na przykład użyj 500 przez pół sekundy. Użyj 3000 przez 3 sekundy.

Krok 3: Inicjalizacja przerwań

3. Dodaj kod „Inicjalizacja TIMER0” do metody setup(). Ponownie, po prostu skopiuj i wklej w setup().

// *** Inicjalizacja TIMERA0 ***

cli(); // wyłącz wszystkie przerwania TIMSK0 = 0; // wyłącz timer0 dla mniejszego jittera OCR0A = 0xBB; // liczba dowolnych przerwań TIMSK0 |= _BV(OCIE0A); // wróć na przerwanie sei(); // ponownie włącz przerwania

Krok 4: Gdzie dodać swój kod

4. Dodaj kod "sprawdzania czasu" do swojej metody loop(). Skopiuj i wklej w loop().

jeśli (czas) {

czas = fałsz; // zrób coś tutaj }

„Czas = fałsz;” linia jest ważna. Bez tego wiersza wiersze „zrób coś tutaj” byłyby wykonywane za każdym razem, gdy program wykonuje loop().

Oczywiście w wierszu „zrób coś tutaj” podstawiasz własne czynności. Zacznij od wydrukowania tekstu lub migania diody LED.

Jesteś skończony!

Zalecana: