#include <Wire.h> // Incluye la biblioteca Wire para la comunicación I2C
#include <Adafruit_GFX.h> // Incluye la biblioteca Adafruit GFX para gráficos
#include <Adafruit_SSD1306.h> // Incluye la biblioteca Adafruit SSD1306 para controlar la pantalla OLED
#define SCREEN_WIDTH 128 // Define el ancho de la pantalla OLED
#define SCREEN_HEIGHT 64 // Define la altura de la pantalla OLED
// Define los pines para los LEDs
#define led1 25 // LED Rojo
#define led2 26 // LED Amarillo
#define led3 19 // LED Naranja
#define led4 18 // LED Verde
#define led5 5 // LED Azul
// Define los pines para los botones
#define button1 12 // Pulsador Rojo
#define button2 4 // Pulsador Azul
int animacion = 1; // Variable para controlar la animación actual
// Crea un objeto para la pantalla OLED con las dimensiones y la comunicación I2C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
// Inicializa la pantalla OLED con la dirección I2C 0x3C
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED")); // Imprime un mensaje de error si falla
while (1); // Bucle infinito si falla la inicialización
}
// Configura los pines de los LEDs como salidas
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
// Configura los pines de los botones como entradas
pinMode(button1, INPUT);
pinMode(button2, INPUT);
}
void loop() {
// Lee el estado de los botones
int button1State = digitalRead(button1);
int button2State = digitalRead(button2);
// Cambia la animación si el botón azul está presionado
if (animacion == 4 && button2State == LOW) { // && = AND
animacion = 0;
delay(200); // Retardo para evitar rebotes
}
if (animacion < 4 && button2State == LOW) {
animacion = animacion + 1;
delay(200); // Retardo para evitar rebotes
}
// Define los patrones de encendido de los LEDs según la animación
// Primera animación
if (animacion == 1 && button1State == LOW) {
digitalWrite(led1, HIGH); delay(500); digitalWrite(led1, LOW); delay(100);
digitalWrite(led2, HIGH); delay(500); digitalWrite(led2, LOW); delay(100);
digitalWrite(led3, HIGH); delay(500); digitalWrite(led3, LOW); delay(100);
digitalWrite(led4, HIGH); delay(500); digitalWrite(led4, LOW); delay(100);
digitalWrite(led5, HIGH); delay(500); digitalWrite(led5, LOW); delay(100);
}
// Segunda animación
if (animacion == 2 && button1State == LOW) {
digitalWrite(led5, HIGH); delay(200); digitalWrite(led5, LOW); delay(100);
digitalWrite(led4, HIGH); delay(200); digitalWrite(led4, LOW); delay(100);
digitalWrite(led3, HIGH); delay(200); digitalWrite(led3, LOW); delay(100);
digitalWrite(led2, HIGH); delay(200); digitalWrite(led2, LOW); delay(100);
digitalWrite(led1, HIGH); delay(200); digitalWrite(led1, LOW); delay(100);
digitalWrite(led5, HIGH); delay(200); digitalWrite(led5, LOW); delay(100);
digitalWrite(led4, HIGH); delay(200); digitalWrite(led4, LOW); delay(100);
digitalWrite(led3, HIGH); delay(200); digitalWrite(led3, LOW); delay(100);
digitalWrite(led2, HIGH); delay(200); digitalWrite(led2, LOW); delay(100);
digitalWrite(led1, HIGH); delay(200); digitalWrite(led1, LOW); delay(100);
}
// Tercera animación
if (animacion == 3 && button1State == LOW) {
digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led5, HIGH);
delay(200); digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led5, LOW);
delay(100); digitalWrite(led2, HIGH); digitalWrite(led4, HIGH);
delay(200); digitalWrite(led2, LOW); digitalWrite(led4, LOW);
delay(100); digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led5, HIGH);
delay(200); digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led5, LOW);
delay(100); digitalWrite(led2, HIGH); digitalWrite(led4, HIGH);
delay(200); digitalWrite(led2, LOW); digitalWrite(led4, LOW);
delay(100); digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led5, HIGH);
delay(200); digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led5, LOW);
delay(100); digitalWrite(led2, HIGH); digitalWrite(led4, HIGH);
delay(200); digitalWrite(led2, LOW); digitalWrite(led4, LOW);
delay(100);
}
// Nueva cuarta animación
if (animacion == 4 && button1State == LOW) {
// LEDs encendidos en forma de carrera hacia adelante
digitalWrite(led1, HIGH); delay(100); digitalWrite(led1, LOW);
digitalWrite(led2, HIGH); delay(100); digitalWrite(led2, LOW);
digitalWrite(led3, HIGH); delay(100); digitalWrite(led3, LOW);
digitalWrite(led4, HIGH); delay(100); digitalWrite(led4, LOW);
digitalWrite(led5, HIGH); delay(100); digitalWrite(led5, LOW);
// LEDs encendidos en forma de carrera hacia atrás
digitalWrite(led5, HIGH); delay(100); digitalWrite(led5, LOW);
digitalWrite(led4, HIGH); delay(100); digitalWrite(led4, LOW);
digitalWrite(led3, HIGH); delay(100); digitalWrite(led3, LOW);
digitalWrite(led2, HIGH); delay(100); digitalWrite(led2, LOW);
digitalWrite(led1, HIGH); delay(100); digitalWrite(led1, LOW);
}
// Impresión en la pantalla OLED
oled.clearDisplay(); // Limpia la pantalla
oled.setTextSize(2); // Establece el tamaño del texto
oled.setTextColor(WHITE); // Establece el color del texto
oled.setCursor(0, 2); // Establece la posición del cursor (x, y)
oled.println("Animacion:"); // Imprime "Animacion:"
oled.println(animacion); // Imprime el número de animación actual
oled.display(); // Actualiza la pantalla para mostrar el texto
}