#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);
  }
}