#include <IRremote.h> // lib p pmexer com IR
#include <Adafruit_SSD1306.h> // lib da tela OLED
#include <Wire.h> // lib p habilitar I2C
#include <Adafruit_GFX.h>
#define led 12
#define ir_pino 23
#define SDA_PIN 21
#define SCL_PIN 22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// constroi um objeto tela do tipo Adafruit_SSD1306
Adafruit_SSD1306 tela(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// constroi um objeto receptor do tipo IRrecv e o argumento é o pino
IRrecv receptor(ir_pino);
// funcao p interpretar os codigos IR
void interpreta(int code){
switch (code){
case 162:
imprime("Ligar");
break;
case 226:
imprime("Menu");
break;
case 34:
imprime("Test");
break;
case 2:
imprime("Aumentar Volume");
break;
case 194:
imprime("Retornar");
break;
case 224:
imprime("Retroceder");
break;
case 168:
imprime("Play");
break;
case 144:
imprime("Avancar");
break;
case 104:
imprime("Digito 0");
break;
case 152:
imprime("Abaixar Volume");
break;
case 176:
imprime("Clear");
break;
case 48:
imprime("Digito 1");
break;
case 24:
imprime("Digito 2");
break;
case 122:
imprime("Digito 3");
break;
case 16:
imprime("Digito 4");
break;
case 56:
imprime("Digito 5");
break;
case 90:
imprime("Digito 6");
break;
case 66:
imprime("Digito 7");
break;
case 74:
imprime("Digito 8");
break;
case 82:
imprime("Digito 9");
break;
default:
imprime("Botao desconhecido");
break;
}
}
// funcao p imprimir na tela
void imprime(const char* msg){
tela.clearDisplay();
tela.setTextColor(WHITE);
tela.setTextSize(2);
tela.setCursor(0, 0);
tela.println(msg);
tela.display();
}
void setup() {
// chama o metodo que inicia o receptor ir
receptor.enableIRIn();
// chama o metodo p iniciar a conexao I2C
Wire.begin(SDA_PIN, SCL_PIN);
// chama o metodo p inciar a tela oled
tela.begin(SSD1306_SWITCHCAPVCC, 0x3c);
pinMode(led, OUTPUT);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
// jeito padrao de checar se o recptor ta recebendo sinal
if (receptor.decode()){
Serial.println(receptor.decodedIRData.command);
digitalWrite(led, HIGH);
interpreta(receptor.decodedIRData.command);
receptor.resume(); // encerra a leitura e permite receber o proximo valor
digitalWrite(led, LOW);
}
}