-
Notifications
You must be signed in to change notification settings - Fork 1
/
Sketch.ino
56 lines (49 loc) · 1.35 KB
/
Sketch.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*Código por Lucas Soares Gomes
*Acionar Relé com 2 palmas
*/
#define tmpMaxPalma 100
#define tmpMaxPalmas 500
#define pinMic 7
#define pinRelay 8
unsigned long tmpEspera = 0;
unsigned long tmpPalmas = 0;
int sensorMic;
int contPalmas = 0;
void Action();
void setup() {
pinMode(pinMic, INPUT);
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, HIGH); //Ligar arduino com Relé desligado
}
void loop() {
/*Normalmente o sensor mantém sua porta ligada até que uma palma seja detectada.
A função digitalRead() faz a leitura contínua do microfone de eletreto.
*/
sensorMic = digitalRead(pinMic);
//Palma detectada
if (sensorMic == LOW) {
/* É necessário um tempo para que uma palma não seja detectada novamente.
* Incrementamos o contador a cada detecção.
*/
if ((millis() - tmpEspera) >= tmpMaxPalma) {
tmpEspera = 0;
} else if (tmpEspera == 0) {
tmpEspera = tmpPalmas = millis();
contPalmas++;
}
}
//Para o tempo excedido zeramos o contador de palmas.
if (((millis() - tmpPalmas) > 500) && (contPalmas != 0)) {
Action();
tmpPalmas = millis();
contPalmas = 0;
}
}
void Action() {
/*
* Pode ser utilizado o switch no lugar do if para mais casos de uso de 3 ou mais palmas.
*/
if(contPalmas == 2){
digitalWrite(pinRelay, !digitalRead(pinRelay));
}
}