// Para la pantalla OLED
#include <Adafruit_SH110X.h>
// Para la comunicación I2C
// Los pines D21 y D22 son los pines por defecto para SDA y SCL respectivamente
#include <Wire.h>
// Adafruit_SH1106G es una clase de la libreria Adafruit_SH110X
// Permite controlar pantallas OLED con el controlador SH1106
// Se crea una instancia de esta clase
// Los primeros 2 argumentos son las dimensiones en pixeles
// &Wire es un puntero a la instancia de la librería Wire que maneja la comunicación I2C
// El ultimo argumento es el pin de reset externo del display, como no se usa se deja en -1
Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire, -1);
const short PIN_LED = 23;
const short RELAY = 13;
// función para escribir en la pantalla un texto recibido como argumento.
void updateOLEDMod(String txt);
void setup() {
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
pinMode(RELAY, OUTPUT);
// Inicializar pantalla OLED
// 0x3C es la dirección I2C por defecto del OLED
// El segundo argumento especifica si el pin de reset está habilitado
// (el reset lo manejara la libreria de manera interna)
display.begin(0x3c, true);
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
updateOLEDMod("OLED Module ON!");
}
void loop() {
if(Serial.available() != 0) {
String cmd = "";
while(Serial.available()) {
cmd += (char)Serial.read();
if(cmd == "LUZ_ON"){
digitalWrite(PIN_LED, HIGH);
digitalWrite(RELAY, HIGH);
updateOLEDMod("RELAY ON!");
}
else if(cmd == "LUZ_OFF") {
digitalWrite(PIN_LED, LOW);
digitalWrite(RELAY, LOW);
updateOLEDMod("RELAY OFF!");
}
}
}
delay(100);
}
void updateOLEDMod(String txt) {
display.clearDisplay();
display.setCursor(0, 0);
display.println(txt);
display.display();
}