U ovom radu implementiran je sustav za beskontaktno paljenje i gašenje LED-ice detekcijom dva uzastopna pljeska rukama. Za detekciju zvučnih signala koristi se mikrofon CZN-15E. Dva uzastopna pljeska prepoznata su mjerenjem vremena između dva hardverska prekida. U slučaju da izmjereno vrijeme odgovara eksperimentalno određenom intervalu, dolazi do paljenja ili gašenja svjetleće diode. U sustavu se također nalazi tipkalo pomoću kojeg se mijenja način svijetljenja diode. Pritiskom tipkala omogućuje se trepereći način rada, odnosno dioda se pali i gasi u određenom vremenskom periodu.
Dependencies: mbed LEDController
Korištene su komponente: ● svjetleća dioda, ● tipkalo, ● otpornik 470 Ω, ● zvučni senzorski modul s mikrofonom CZN-15E, ● NUCLEO-F072RB pločica mikroupravljača
main.cpp@0:907d265d7286, 2021-12-02 (annotated)
- Committer:
- mpistelek
- Date:
- Thu Dec 02 21:07:40 2021 +0000
- Revision:
- 0:907d265d7286
Pistelek_Gasenje-Paljenje_Svjetla_Pljeskanjem
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mpistelek | 0:907d265d7286 | 1 | #include "mbed.h" |
mpistelek | 0:907d265d7286 | 2 | #include "LEDController.h" |
mpistelek | 0:907d265d7286 | 3 | |
mpistelek | 0:907d265d7286 | 4 | #define MINDIFFTIME 200 |
mpistelek | 0:907d265d7286 | 5 | #define MAXDIFFTIME 350 |
mpistelek | 0:907d265d7286 | 6 | |
mpistelek | 0:907d265d7286 | 7 | Serial pc(USBTX, USBRX); // tx, rx |
mpistelek | 0:907d265d7286 | 8 | InterruptIn mic(PB_3); |
mpistelek | 0:907d265d7286 | 9 | InterruptIn button(PB_4); |
mpistelek | 0:907d265d7286 | 10 | Timer debounce; |
mpistelek | 0:907d265d7286 | 11 | Timer micTimer; |
mpistelek | 0:907d265d7286 | 12 | |
mpistelek | 0:907d265d7286 | 13 | int measuredTime; |
mpistelek | 0:907d265d7286 | 14 | |
mpistelek | 0:907d265d7286 | 15 | LEDController controller(PB_5, 0.25, false, true); |
mpistelek | 0:907d265d7286 | 16 | |
mpistelek | 0:907d265d7286 | 17 | void button_interrupt(); |
mpistelek | 0:907d265d7286 | 18 | void mic_interrupt(); |
mpistelek | 0:907d265d7286 | 19 | |
mpistelek | 0:907d265d7286 | 20 | int main(){ |
mpistelek | 0:907d265d7286 | 21 | pc.baud(9600); |
mpistelek | 0:907d265d7286 | 22 | |
mpistelek | 0:907d265d7286 | 23 | debounce.start(); |
mpistelek | 0:907d265d7286 | 24 | button.rise(&button_interrupt); |
mpistelek | 0:907d265d7286 | 25 | mic.rise(&mic_interrupt); |
mpistelek | 0:907d265d7286 | 26 | |
mpistelek | 0:907d265d7286 | 27 | while (true) { |
mpistelek | 0:907d265d7286 | 28 | controller.checkOnOffState(); |
mpistelek | 0:907d265d7286 | 29 | } |
mpistelek | 0:907d265d7286 | 30 | } |
mpistelek | 0:907d265d7286 | 31 | |
mpistelek | 0:907d265d7286 | 32 | void mic_interrupt() { |
mpistelek | 0:907d265d7286 | 33 | micTimer.stop(); |
mpistelek | 0:907d265d7286 | 34 | |
mpistelek | 0:907d265d7286 | 35 | measuredTime = micTimer.read_ms(); |
mpistelek | 0:907d265d7286 | 36 | |
mpistelek | 0:907d265d7286 | 37 | if(measuredTime > 50){ |
mpistelek | 0:907d265d7286 | 38 | pc.printf("Mikrofon prekid! %d\n\r", measuredTime); |
mpistelek | 0:907d265d7286 | 39 | if (measuredTime > MINDIFFTIME && measuredTime < MAXDIFFTIME) { |
mpistelek | 0:907d265d7286 | 40 | pc.printf("Pali/gasi!\n\r"); |
mpistelek | 0:907d265d7286 | 41 | controller.toggleShouldBeOn(); |
mpistelek | 0:907d265d7286 | 42 | } |
mpistelek | 0:907d265d7286 | 43 | } |
mpistelek | 0:907d265d7286 | 44 | |
mpistelek | 0:907d265d7286 | 45 | micTimer.reset(); |
mpistelek | 0:907d265d7286 | 46 | micTimer.start(); |
mpistelek | 0:907d265d7286 | 47 | } |
mpistelek | 0:907d265d7286 | 48 | |
mpistelek | 0:907d265d7286 | 49 | void button_interrupt(){ |
mpistelek | 0:907d265d7286 | 50 | if(debounce.read_ms() > 200){ |
mpistelek | 0:907d265d7286 | 51 | controller.toggleBlinkingMode(); |
mpistelek | 0:907d265d7286 | 52 | pc.printf("Blinking mod: %s\n\r", controller.getBlinkingMode()?"true":"false"); |
mpistelek | 0:907d265d7286 | 53 | } |
mpistelek | 0:907d265d7286 | 54 | |
mpistelek | 0:907d265d7286 | 55 | debounce.reset(); |
mpistelek | 0:907d265d7286 | 56 | } |