#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define boton 25
#define switchPin 14
#define led 18 // Define el pin del LED, asegúrate de usar el pin correcto según tu configuración
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
boolean estadoBoton;
boolean estadoSwitch;
void setup() {
pinMode(led, OUTPUT); // Asigna el pin del LED como salida
pinMode(boton, INPUT); // Asigna el pin del botón como entrada
pinMode(switchPin, INPUT); // Asigna el pin del interruptor como entrada
Serial.begin(115200); // Inicia la comunicación serial a 115200 baudios
Serial.println("Hello, GR2 ET DEMERA"); // Imprime un mensaje inicial por el puerto serial
// Inicia la comunicación I2C para la pantalla OLED
Wire.begin(21, 22); // Inicia el bus I2C con los pines GPIO 21 (SDA) y GPIO 22 (SCL)
// Inicia la pantalla OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Inicia la pantalla OLED con dirección I2C 0x3C
Serial.println(F("SSD1306 allocation failed")); // Imprime un mensaje de error si falla la inicialización
for (;;); // Bucle infinito si falla la inicialización
}
display.clearDisplay(); // Borra el contenido actual de la pantalla OLED
display.setTextSize(1); // Establece el tamaño del texto en 1 (pequeño)
display.setTextColor(SSD1306_WHITE); // Establece el color del texto en blanco
display.setCursor(0,0); // Coloca el cursor en la posición (0, 0)
display.println("Hello, GR2 ET DEMERA"); // Imprime un mensaje inicial en la pantalla OLED
display.display(); // Muestra en la pantalla OLED lo que se ha preparado hasta ahora
}
void loop() {
estadoSwitch = digitalRead(switchPin); // Lee el estado del interruptor y lo guarda en estadoSwitch
if (estadoSwitch == HIGH) { // Si el interruptor está cerrado (HIGH)
estadoBoton = digitalRead(boton); // Lee el estado del botón y lo guarda en estadoBoton
if (estadoBoton == HIGH) { // Si el botón está presionado (HIGH)
PrenderLed(); // Llama a la función para encender el LED y mostrarlo en la pantalla OLED
} else {
ApagarLed(); // Llama a la función para apagar el LED y mostrarlo en la pantalla OLED
}
} else { // Si el interruptor está abierto (LOW)
ApagarLed(); // Llama a la función para apagar el LED y mostrarlo en la pantalla OLED
}
}
void PrenderLed() {
display.clearDisplay(); // Borra el contenido actual de la pantalla OLED
display.setTextSize(1); // Establece el tamaño del texto en 1 (pequeño)
display.setTextColor(SSD1306_WHITE); // Establece el color del texto en blanco
display.setCursor(0,0); // Coloca el cursor en la posición (0, 0)
display.println("LED PRENDIDO"); // Imprime un mensaje indicando que el LED está encendido
display.display(); // Muestra en la pantalla OLED lo que se ha preparado hasta ahora
digitalWrite(led, HIGH); // Enciende el LED en el pin especificado
Serial.println("LED PRENDIDO"); // Imprime un mensaje en el puerto serial indicando que el LED está encendido
// Puedes ajustar el tiempo de encendido del LED aquí
delay(1000); // Espera 1 segundo (1000 milisegundos)
}
void ApagarLed() {
display.clearDisplay(); // Borra el contenido actual de la pantalla OLED
display.display(); //esto va para todo para presentar asi sea lo que esta borrado
digitalWrite(led, LOW); // Apaga el LED en el pin especificado
Serial.println("LED APAGADO"); // Imprime un mensaje en el puerto serial indicando que el LED está apagado
}