// Definición de pines
int pinled = 2;
int pinPulsa = 4;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED en píxeles
#define SCREEN_HEIGHT 64 // Altura de la pantalla OLED en píxeles
// Dirección I2C de la pantalla SSD1306 (0x3C es comúnmente utilizada)
#define OLED_ADDRESS 0x3C
// Crear un objeto display con las dimensiones especificadas
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
// Variables de estado
bool estadoLed = false;
bool estadoBotonAnterior = LOW;
unsigned long ultimaLecturaBoton = 0;
const int debounceDelay = 50;
void setup() {
pinMode(pinled, OUTPUT);
pinMode(pinPulsa, INPUT);
digitalWrite(pinled, LOW);
Serial.begin(9600);
Serial.println("Sistema iniciado");
// Inicializar pantalla OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println(F("Fallo en la inicialización del SSD1306"));
for(;;); // Bucle infinito en caso de fallo
}
display.display();
delay(2000); // Espera para que la pantalla inicialice
display.clearDisplay(); // Limpia la pantalla
}
void loop() {
bool estadoBotonActual = digitalRead(pinPulsa);
// Manejamos el rebote
if ((millis() - ultimaLecturaBoton) > debounceDelay) {
if (estadoBotonActual == HIGH && estadoBotonAnterior == LOW) {
estadoLed = !estadoLed;
digitalWrite(pinled, estadoLed ? HIGH : LOW);
// Mostrar el estado del LED en el monitor serie
Serial.print("Botón presionado. Estado del LED: ");
Serial.println(estadoLed ? "Encendido" : "Apagado");
// Actualizar la pantalla OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
if (estadoLed) {
display.println("Prendido");
} else {
display.println("Apagado");
}
display.display();
}
if (estadoBotonActual != estadoBotonAnterior) {
ultimaLecturaBoton = millis();
}
estadoBotonAnterior = estadoBotonActual;
}
}