#include <IRremote.h>
#define PIN_RECEIVER 12
IRrecv receiver(PIN_RECEIVER);
String irresultado=""; //Almacena el resultado del control remoto
byte nivelmenu = 0;
byte cantemisoras = 150; // Almacena la cant total de emisoras de radio
byte emisoraelegida = 0; // Almacena la emisora elegida via teclado
byte volumen=15; // Almacena nivel de volumen
const byte maxvolume = 21; // nivel de volumen máximo
byte volumemute; // almacena de manera temporal el volumen mientras esta en mute.
bool mute=0; // Esta en mute el volumen
/*
nivel 10: seleccion de emisoras por teclado numérico.
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
receiver.enableIRIn();
}
void loop() {
if (receiver.decode()) {
translateIR(receiver.decodedIRData.command);
receiver.resume(); // Receive the next value
}
}
void translateIR(byte codigo){
Serial.println(codigo);
// En caso de cambio de emisora por teclado....
if ((nivelmenu==0 & (( codigo == 104 ) || ( codigo == 48 ) || ( codigo == 24 ) || // que el nivel sea cero y la tecla oprimida sea numerica
( codigo == 122 ) || ( codigo == 16 ) || ( codigo == 56 ) ||
( codigo == 90 ) || ( codigo == 66 ) || ( codigo == 74 ) ||
( codigo == 82 ))) || nivelmenu==10) {
if (irresultado.length()==3)
codigo=168; // si ya hay 3 digitos el proximo toque de boton sera como play
nivelmenu = 10; // ya estamos dentro de la seleccion de emisoras por teclado
switch (codigo) {
case 104:
irresultado += '0';
// dibujar en pantalla el numero correspondiente en este caso el cero
break;
case 48:
irresultado += '1';
break;
case 24:
irresultado += '2';
break;
case 122:
irresultado += '3';
break;
case 16:
irresultado += '4';
break;
case 56:
irresultado += '5';
break;
case 90:
irresultado += '6';
break;
case 66:
irresultado += '7';
break;
case 74:
irresultado += '8';
break;
case 82:
irresultado += '9';
break;
case 176: // retroceso
irresultado.remove(irresultado.length() - 1);
break;
case 168: // Play
Serial.println("Play");
emisoraelegida=irresultado.toInt();
if (emisoraelegida>=0 & emisoraelegida<=cantemisoras){
Serial.print("Cambio de emisora No: ");
Serial.println(emisoraelegida);
nivelmenu=0; // restablece el nivel de menu
// Ejecutar rutina de cambio de emisora
// normaliza pantalla
}
else
Serial.print("Emisora no Encontrada");
irresultado="";
break;
}
}
Serial.println(irresultado);
// subir volumen
if(nivelmenu==0 & codigo==2) { // subir volumen
// animar en pantalla el cambio de volumen
if(volume < maxvolume)
volume++;
Serial.print("Volumen: ");
Serial.print(volume);
// presenta en pantalla el volumen
}
// bajar volumen
if(nivelmenu==0 & codigo==152) { // subir volumen
if(volume > 0)
volume--;
Serial.print("Volumen: ");
Serial.print(volume);
// presenta en pantalla el volumen
}
// Volumen mute.
if(nivelmenu==0 & codigo==162) { // subir volumen
if(mute=0){
// presenta mute en pantalla
volumemute=volume;
mute=true;
// ejecutar ritina poner en cero volumen
}
else
{
mute=false;
// ejecutar rutina poner volumen anterior.
}
}
}