// ---------------------------------------------------------------------------
// (| "Luces_Policia_Attiny85.ino                                          "|)
// (| "                                                                    "|)
// (| " Este código de ejemplo es de dominio público.                      "|)
// (| "                                                                    "|)
// (| " Maker/Developer: jorgechac© - Técnico Laboral en Programación UNAB "|)
// (| " Visita https://jorgechac.blogspot.com                              "|)
// (| "                                                                    "|)
// (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32                "|)
// (| " Whatsapp y Ventas NEQUI +573177295861                              "|)
// (| " Bucaramanga - Colombia                                             "|)
// (| "                                                                    "|)
// (| " Simulación: https://wokwi.com/projects/382522464759782401          "|)
// (| " Descarga gratis este sketch en:                                    "|)
// (| " https://create.arduino.cc/editor/jorgechac/                        "|)
// ---------------------------------------------------------------------------

#include "Arduino.h"  // directiva de preprocesador que incluye el archivo de
                      // encabezado "Arduino.h" Este archivo es parte del
                      // entorno de desarrollo de Arduino y proporciona
                      // definiciones y funciones básicas necesarias para
                      // programar en Arduino

#include <EEPROM.h>   // directiva de preprocesador que incluye el archivo de
                      // encabezado "EEPROM.h" Este archivo permite el uso de
                      // funciones relacionadas con la EEPROM de Arduino

#define LED_PIN1 1   // LED 1 - D1
#define LED_PIN2 2   // LED 2 - D2
#define LED_PIN3 3   // LED 3 - D3
#define LED_PIN4 4   // LED 4 - D4
#define buttonPin 0  // Push Button Pin - D0

int SPEED = 60;      // velocidad a la que los leds parpadearan

int numb = 1;
int pres = 0;

void setup() {

  EEPROM.update(0, 1);  // *IMPORTANTE* - Corra esta línea de código SÓLO
                        // la primera vez. Luego comentalo y vuelve a subir
                        // el código.
  
  numb = EEPROM.read(0);  // se lee el valor almacenado en la EEPROM para
                          // determinar el patrón de iluminación actual
  
  pinMode(buttonPin, INPUT);  // se inicializa el pin D0 como entrada
  pinMode(LED_PIN1, OUTPUT);  // se inicializa el pin D1 como salida
  pinMode(LED_PIN2, OUTPUT);  // se inicializa el pin D2 como salida
  pinMode(LED_PIN3, OUTPUT);  // se inicializa el pin D3 como salida
  pinMode(LED_PIN4, OUTPUT);  // se inicializa el pin D4 como salida
}

void loop() {

  ButtonScan(); // escanea el botón y selecciona un patrón de iluminación
                // según el valor de <numb> cada patrón está implementado en
                // funciones separadas

  switch (numb) {

    case 1:
      HAZI_TECH_VIP_1();
      break;

    case 2:
      HAZI_TECH_VIP_2();
      break;

    case 3:
      HAZI_TECH_VIP_3();
      break;

    case 4:
      HAZI_TECH_VIP_4();
      break;

    case 5:
      HAZI_TECH_VIP_5();
      break;

    case 6:
      HAZI_TECH_VIP_6();
      break;

    case 7:
      HAZI_TECH_VIP_7();
      break;

    case 8:
      HAZI_TECH_VIP_8();
      break;

    case 9:
      HAZI_TECH_VIP_2();
      HAZI_TECH_VIP_3();

      HAZI_TECH_VIP_4();
      HAZI_TECH_VIP_4();
      HAZI_TECH_VIP_4();

      HAZI_TECH_VIP_5();
      HAZI_TECH_VIP_5();

      HAZI_TECH_VIP_6();
      HAZI_TECH_VIP_6();
      HAZI_TECH_VIP_6();
      HAZI_TECH_VIP_6();
      HAZI_TECH_VIP_6();

      HAZI_TECH_VIP_7();
      HAZI_TECH_VIP_7();
      HAZI_TECH_VIP_7();
      HAZI_TECH_VIP_7();
      HAZI_TECH_VIP_7();

      HAZI_TECH_VIP_8();
      HAZI_TECH_VIP_8();
      HAZI_TECH_VIP_8();
      HAZI_TECH_VIP_8();
      HAZI_TECH_VIP_8();

      break;

    default:
      HAZI_TECH_VIP_1();

      break;
  }
}

void HAZI_TECH_VIP_1() {

  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
}

void HAZI_TECH_VIP_2() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_3() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_4() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_5() {
  digitalWrite(LED_PIN1, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_6() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();

  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_7() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN1, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN4, HIGH);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN2, HIGH);
  digitalWrite(LED_PIN3, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
}

void HAZI_TECH_VIP_8() {
  digitalWrite(LED_PIN1, HIGH);
  digitalWrite(LED_PIN2, HIGH);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN1, LOW);
  digitalWrite(LED_PIN2, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, HIGH);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
  digitalWrite(LED_PIN3, LOW);
  digitalWrite(LED_PIN4, LOW);
  delay(SPEED);
  ButtonScan();
  delay(SPEED);
  ButtonScan();
}

void ButtonScan() {
  if (digitalRead(buttonPin) == 1) {
    if (pres == 0) {
      numb++;
      EEPROM.update(0, numb);
      pres = 1;
      digitalWrite(LED_PIN1, HIGH);
      digitalWrite(LED_PIN2, HIGH);
      digitalWrite(LED_PIN3, HIGH);
      digitalWrite(LED_PIN4, HIGH);
      delay(750);
      digitalWrite(LED_PIN1, LOW);
      digitalWrite(LED_PIN2, LOW);
      digitalWrite(LED_PIN3, LOW);
      digitalWrite(LED_PIN4, LOW);
    }
  } else {
    pres = 0;
  }

  if (numb == 10) {
    numb = 1;
  }
}
ATTINY8520PU