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

https://os.mbed.com/media/uploads/mpistelek/pistelek_shema1.jpg https://os.mbed.com/media/uploads/mpistelek/pistelek_shema2.jpg

main.cpp

Committer:
mpistelek
Date:
2021-12-02
Revision:
1:7e8ffea44423
Parent:
0:907d265d7286

File content as of revision 1:7e8ffea44423:

#include "mbed.h"
#include "LEDController.h"

#define MINDIFFTIME 200
#define MAXDIFFTIME 350

Serial pc(USBTX, USBRX); // tx, rx
InterruptIn mic(PB_3);
InterruptIn button(PB_4);
Timer debounce;
Timer micTimer;

int measuredTime;

LEDController controller(PB_5, 0.25, false, true);

void button_interrupt();
void mic_interrupt();

int main(){
    pc.baud(9600);
    
    debounce.start();
    button.rise(&button_interrupt);
    mic.rise(&mic_interrupt);
   
    while (true) {
        controller.checkOnOffState();
    }    
}

void mic_interrupt() {
    micTimer.stop();
    
    measuredTime = micTimer.read_ms();
    
    if(measuredTime > 50){ 
        pc.printf("Mikrofon prekid! %d\n\r", measuredTime); 
        if (measuredTime > MINDIFFTIME && measuredTime < MAXDIFFTIME) {
            pc.printf("Pali/gasi!\n\r"); 
            controller.toggleShouldBeOn(); 
        }  
    }
    
    micTimer.reset();
    micTimer.start();
}

void button_interrupt(){
    if(debounce.read_ms() > 200){
        controller.toggleBlinkingMode();
        pc.printf("Blinking mod: %s\n\r", controller.getBlinkingMode()?"true":"false");
    }
    
    debounce.reset();
}