Tajmeri i prekidi
U sljedećim vježbama naučit ćete koristiti klase Timer
, Timeout
, Ticker
i InterruptIn
iz standardne mbed biblioteke. Programski kôdovi su dijelom preuzeti iz preporučene literature: Toulson, R. & Wilmshurst, T. (2016). Fast and Effective Embedded Systems Design - Applying the ARM mbed (2nd edition), Newnes, Oxford, ISBN: 978-0-08-100880-5.
Korištenje mbed klase Timer¶
Proučite API dokumentaciju klase Timer
.
Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.
#include "mbed.h" Timer timer_fast; Timer timer_slow; DigitalOut ledA(LED1); DigitalOut ledB(LED4); void task_fast(void); void task_slow(void); int main() { timer_fast.start(); timer_slow.start(); while(true){ if (timer_fast.read() > 0.2) { task_fast(); timer_fast.reset(); } if (timer_slow.read() > 1) { task_slow(); timer_slow.reset(); } } } void task_fast(void) { ledA = !ledA; } void task_slow(void) { ledB = !ledB; }
Korištenje mbed klase Timeout¶
Proučite API dokumentaciju klase Timeout
.
Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.
#include "mbed.h" Timeout response; DigitalIn button (p14); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); void blink() { led2 = 1; wait(0.5); led2 = 0; } int main() { while(true) { if(button == 1){ response.attach(&blink, 3.0); led3=1; } else { led3=0; } led1=!led1; wait(0.2); } }
Modificirajte gornji programski kôd tako da dodate drugo tipkalo, čijim pritiskom se poništava pridruživanje blink()
funkcije s objekta response
(izvršite detach()
).
Korištenje mbed klase Ticker¶
Proučite API dokumentaciju klase Ticker
.
Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.
#include "mbed.h" void led_switch(void); Ticker time_up; DigitalOut myled(LED1); void led_switch() { myled=!myled; } int main(){ time_up.attach(&led_switch, 0.2); while(true) { wait(1); } }
Modificirajte gornji kôd tako da neka druga LED-ica blinka svaku sekundu.
Korištenje mbed klase InterruptIn¶
Proučite API dokumentaciju klase InterruptIn
.
Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.
#include "mbed.h" InterruptIn button(p14); DigitalOut led(LED1); DigitalOut flash(LED4); void isr1() { led = !led; } int main() { button.rise(&isr1); while(true) { flash = !flash; wait(0.2); } }
Pritišćite button
nekoliko puta i pažljivo promatrajte ponašanje diode LED1
. Da li ste se prisjetili bouncing efekta?
Uklanjanje bouncing efekta (debouncing)¶
Modificirajte program iz prethodne vježbe tako da se ukloni problem bouncing-a, odnosno izvršite debouncing tipkala. Moguće rješenje dano je u sljedećem programskom kôdu:
#include "mbed.h" InterruptIn button(p14); DigitalOut led(LED1); DigitalOut flash(LED4); Timer debounce; void isr1() { if (debounce.read_ms() > 200) { led = !led; debounce.reset(); } } int main() { debounce.start(); button.rise(&isr1); while(true) { flash = !flash; wait(0.2); } }
Pogledajte također i dokumentaciju klasa DebounceIn
i PinDetect
, koje su napisane u svrhu debouncinga sklopki i tipkala. Dodatni korisni tutorial o tipkalima i sklopkama možete pročitati ovdje.
Mjerenje udaljenosti pomoću ultrazvučnog senzora HC-SR04¶
Na raspolaganju je ultrazvučni senzor udaljenosti HC-SR04. Napišite program za mjerenje udaljenosti pomoću navedenog senzora.
Čestitke!
Završili ste sve vježbe iz teme Tajmeri i prekidi.
Povratak na naslovnu stranicu TVZ Mechatronics Team-a.