Buenas noches, me gustaria saber que parametro no estoy teniendo en cuenta o que problema podria tener mi codigo. Anteriormente utilice switch() y tampoco funciono. El problema es que despues de que suena el buzzer con la funcion de tone() no me vuelve a ejecutar ningun condicional o case() del control remoto.
Este es mi codigo:
#include <IRremote.h>
#define SW_1 0xE13830DE
#define SW_2 0x9929519F
#define SW_3 0xA182EBF
int sensor= 0;
int fria=12;
int calida=13;
int positivo=1;
IRrecv irrecv(sensor);
decode_results IRcontrol;
#include <Servo.h>
Servo servo;
#include <Keypad.h>
const byte Filas = 4;
const byte Columnas = 4;
byte PinFilas[4] = {9,8,7,6};
byte PinColumnas[4] = {5,4,3,2};
char Teclas [ Filas ][ Columnas ] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char codigoSecreto[6] = {'1','2','3','4','5','6'};
int posicion=0;
int ledVerde=A0;
int ledRojo=A1;
int pulsador=A5;
int buzz=10;
Keypad Teclado = Keypad(makeKeymap(Teclas), PinFilas, PinColumnas, Filas, Columnas);
void setup()
{
Serial.begin(9600) ;
irrecv.enableIRIn();
pinMode(fria, OUTPUT);
pinMode(calida, OUTPUT);
pinMode(positivo,OUTPUT);
pinMode (ledVerde,OUTPUT);
pinMode (ledRojo, OUTPUT);
pinMode (buzz, OUTPUT);
pinMode (sensor, INPUT);
servo.attach(11);
servo.write(180);
}
void loop()
{
digitalWrite(positivo,HIGH);
if (irrecv.decode(&IRcontrol))
{
Serial.println(IRcontrol.value, HEX);
if (IRcontrol.value ==SW_1)
{
digitalWrite(fria,!digitalRead(fria));
delay(100);
}
if(IRcontrol.value== SW_2)
{
digitalWrite(calida,!digitalRead(calida));
delay(100);
}
if(IRcontrol.value== SW_3)
{
correcto();
}
irrecv.resume();
}
int switchInter=analogRead(pulsador);
if (switchInter>=1000)
{
correcto();
}
char tecla = Teclado.getKey() ; //teclado
if (tecla != 0)
{
if (tecla == codigoSecreto[posicion])
{
posicion ++;
}
if (posicion == 6)
{
Serial.println("Clave correcta ");
correcto();
}
if(tecla=='*')
{
Serial.println("reinicio");
posicion=0;
analogWrite(ledRojo,255); // encendemos el LED rojo
analogWrite(ledVerde, 0); // apagamos el verde
}
if(tecla=='A')
{
Serial.println("timbre");
DO(); DO(); DO();
delay(20);
FA();LA();
delay(120);
DO();DO();DO();
delay(20);
FA();LA();
delay(120);
FA();FA();MI();MI();RE();RE();
delay(20);
tone(buzz,523.25, 700);
posicion=0;
irrecv.resume();
}
}
}
void correcto()
{
analogWrite(ledRojo,0);
analogWrite(ledVerde, 255);
analogWrite(ledRojo,0);
servo.write(180);
delay(1000);
servo.write(0);
delay(3000);
servo.write(180);
delay(1000);
analogWrite(ledVerde,0);
analogWrite(ledRojo,255);
posicion =0;
}
void DO()
{
tone(buzz,523.25, 120);
delay(160);
}
void FA()
{
tone(buzz,698.46, 120);
delay(200);
}
void LA()
{
tone(buzz,880, 200);
delay(240);
}
void MI()
{
tone(buzz,659.26, 120);
delay(160);
}
void RE()
{
tone(buzz,587.33, 120);
delay(160);
}