// Librerías
#include "config.h"

// Variables a utilizar
int pot1;
int pot2;
int vpot1;
int vpot2;
int pb1;
int pb2;
int pb3;
int pb1_prev;
int pb2_prev;
int pb3_prev;
int oldledr;
int oldleda;
int oldledv;
int LEDr = 0;
int LEDa = 0;
int LEDv = 0;
int LEDy = 0;
int LEDc = 0;
int data = 0;

// Punteros para Adafruit
AdafruitIO_Feed *ALEDr = io.feed("LEDrojo");
AdafruitIO_Feed *ALEDa = io.feed("LEDazul");
AdafruitIO_Feed *ALEDv = io.feed("LEDverde");
AdafruitIO_Feed *Abla = io.feed("LEDamarillo");
AdafruitIO_Feed *Ablc = io.feed("LEDceleste");

void setup() {
  // ENTRADAS
  pinMode(25, INPUT_PULLUP);
  pinMode(33, INPUT_PULLUP);
  pinMode(32, INPUT_PULLUP);
  pinMode(35, INPUT);
  pinMode(34, INPUT);

  //SALIDAS
  pinMode(5, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT);
  pinMode(21, OUTPUT);
  pinMode(22, OUTPUT);

  // Comunicación Serial
  Serial.begin(115200);
  while(! Serial);

  // Conexión WIFI de Wokwi
  Serial.print("Connecting to WiFi");
  WiFi.begin("Wokwi-GUEST", "", 6);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println(" Connected!");

  // Coneción con Adafruit
  Serial.print("Connecting to Adafruit IO");
  io.connect();
  while(io.status() < AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.println(io.statusText());

}

void loop() {
  // Inicio de Adafruit
  io.run();

  //Lectura de Pots
  pot1 = analogRead(35);
  vpot1 = map(pot1, 0, 4095, 0, 255);

  pot2 = analogRead(34);
  vpot2 = map(pot2, 0, 4095, 0, 255);

  //Lectura de PBs
  pb1 = digitalRead(32);
  pb2 = digitalRead(33);
  pb3 = digitalRead(25);


  //Funcionamiento

  //Encendido de LED rojo
  if(!pb1)
  {
    pb1_prev = 1;
  }
  if(pb1_prev && pb1)
  {
    if(!LEDr)
    {
      LEDr = 1;
    }
    else{
      LEDr = !LEDr;
    }
    digitalWrite(5, LEDr);
    pb1_prev = 0;
  }

  //Encendido de LED azul
  if(!pb2)
  {
    pb2_prev = 1;
  }
  if(pb2_prev && pb2)
  {
    if(!LEDa)
    {
      LEDa = 1;
    }
    else{
      LEDa = !LEDa;
    }
    digitalWrite(18, LEDa);
    pb2_prev = 0;
  }

  //Encendido de LED verde
  if(!pb3)
  {
    pb3_prev = 1;
  }
  if(pb3_prev && pb3)
  {
    if(!LEDv)
    {
      LEDv = 1;
    }
    else{
      LEDv = !LEDv;
    }
    digitalWrite(19, LEDv);
    pb3_prev = 0;
  }

  //Encendido de LED amarillo
  analogWrite(21, vpot1);

  //Encendido de LED celeste
  analogWrite(22, vpot2);

  delay(10); // this speeds up the simulation

  // Envío de datos a Adafruit
  if(LEDr != oldledr){
    ALEDr->save(LEDr);
  }
  if(LEDa != oldleda){
    ALEDa->save(LEDa);
  }
  if(LEDv != oldledv){
    ALEDv->save(LEDv);
  }
  if(vpot1 != oldbla){
    Abla->save(vpot1);
  }
  if(vpot2 != oldblc){
    Ablc->save(vpot2);
  }
  
  // Guardar valores
  oldledr = LEDr;
  oldleda = LEDa;
  oldledv = LEDv;
  oldbla = vpot1;
  oldblc = vpot2;

  delay(3000);
  
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
pot1:GND
pot1:SIG
pot1:VCC
pot2:GND
pot2:SIG
pot2:VCC