#include <EEPROM.h>
// LEDS
const byte ledRojo = 3;
const byte ledNaranja = 4;
const byte ledVerde = 5;
// Pulsador
const byte pulsador = 2;
// Variabel de modo animación
// Si vale 1 → LED rojo (por defecto)
// Si vale 2 → LED naranja
// Si vale 3 → LED verde
byte modoAnimacion = 0;
// Posición de memoria
const byte posicionMemoria = 0;
void setup() {
// Serial
Serial.begin(9600);
// Modo pines
pinMode(ledRojo, OUTPUT);
pinMode(ledNaranja, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
// Lectura modo animación
modoAnimacion = EEPROM.read(posicionMemoria);
Serial.print("Modo Animacion cargado EEPROM: ");
Serial.println(modoAnimacion);
// En el caso de no ser ningún valor entre 1 y 3, hay que poner un modo por defecto
if (modoAnimacion < 1 || modoAnimacion > 3) {
// Guardar el valor por defecto
EEPROM.write(posicionMemoria, 1);
// Valor por defecto animación y contador
modoAnimacion = 1;
}
}
void loop() {
// Leer pulsador
boolean pulsado = digitalRead(pulsador);
delay(200);
// Si se ha pulsado sumar una al contador
if (!pulsado) {
modoAnimacion++;
// Comprobar que no se salga de rango
if (modoAnimacion > 3) {
modoAnimacion = 1;
}
Serial.print("Modo Animacion: ");
Serial.println(modoAnimacion);
}
// Empezar con todos los LEDs apagados
digitalWrite(ledRojo, LOW);
digitalWrite(ledNaranja, LOW);
digitalWrite(ledVerde, LOW);
// Encender el LED correspondiente
if (modoAnimacion == 1) {
// LED rojo
digitalWrite(ledRojo, HIGH);
} else if (modoAnimacion == 2) {
// LED naranja
digitalWrite(ledNaranja, HIGH);
} else if (modoAnimacion == 3) {
// LED verde
digitalWrite(ledVerde, HIGH);
}
// Comprobar si ha cambiado el valor
// actualizar memoria EEPROM
if (!pulsado) {
Serial.println("Cambio modo animación EEPROM");
EEPROM.write(posicionMemoria, modoAnimacion);
}
}