include<IRremote.h>
int sensorSom = 7; // Pino sensor de som
int pinoRele = 8; // Pino rele
int contPalmas = 0; // Contador de Palmas
unsigned long tempMaxSom = 1000; // Tempo máximo entre o pulso seguinte
unsigned long tempMinSom = 300; // Tempo minimo entre o pulso seguinte
unsigned long compriSom = 100; // Comprimento do som esperado
unsigned long time;
unsigned long startTime = 0; //Pino digital utilizado pelo módulo relé
const int pinoSensorIR = 9; //Pino digital utilizado pelo sensor IR
int statusLamp = 0; //Controla o status do relé (LIGADO / DESLIGADO)
int liga_desliga = 0xFF6897; // código hexadecimal da tecla POWER
int valorRecebido; // valor recebido do status da tecla quando acionada
IRrecv irrecv(pinoSensorIR);
decode_results resultado;
void setup()
{
pinMode(sensorSom, INPUT); // Inicia o pino do sensor como entrada
pinMode(pinoRele, OUTPUT); // Inicia os pino do rele como saída
// Desliga rele (o rele é invertido HIGH desliga / LOW liga)
digitalWrite(pinoRele, HIGH);
pinMode(pinoRele, OUTPUT); //Define como saída (relé)
digitalWrite(pinoRele, HIGH); //Módulo relé inicia desligado
irrecv.enableIRIn(); // inicializa o sensor IR
}
void loop(){
time = millis();
//Inicio sensor de palmas
// Verifica o tempo entre o pulso inicial e o seguinte
unsigned long tempoAposPalma = time - startTime;
if (tempoAposPalma >= compriSom && digitalRead(sensorSom) == LOW)
// Verifica se o pulso recebido respeita o intervalo
if (tempoAposPalma < tempMinSom || tempoAposPalma > tempMaxSom) {
// Caso não respeite reseta a contagem e o tempo
contPalmas = 0;
startTime = millis();
}
else {
// Iniciada a contagem de pulso e o tempo
contPalmas ++;
startTime = millis();
}
// Verifica se a contagem de palma é igual a 1 e se o rele esta desligado
if ((contPalmas >= 1) && (digitalRead(pinoRele) == HIGH)) {
// se rele estiver desligado, Liga e zera a contagem
digitalWrite(pinoRele, LOW);
contPalmas = 0;
}
// Verifica se a contagem de palma é igual a 1 e se o rele esta ligado
if ((contPalmas >= 1) && (digitalRead(pinoRele) == LOW)) {
// se rele estiver ligado, desliga e zera a contagem
digitalWrite(pinoRele, HIGH);}
contPalmas = 0;
}
//Fim sensor de palmas
//Inicio IR
if (irrecv.decode(&resultado)) // Executa caso receba algum códico
{
valorRecebido = (resultado.value);
if(valorRecebido == liga_desliga)
{
if (statusLamp==0)
{
digitalWrite(pinoRele, LOW); //Liga o módulo relé (LÂMPADA ACENDE)
statusLamp = 1; //altera o status da lampada (como desligado)
delay(500);
}
else
{
digitalWrite(pinoRele, HIGH); //Liga o módulo relé (LÂMPADA APAGA)
statusLamp = 0; //altera o status da lampada (como ligado)
delay(500);
irrecv.resume(); }// Aguarda a tecla ser acionada)
}
}