// #define declara una variable que reemplaza sus usos por su valor
// antes de compilar. No tiene verficación de tipos
// En cambio const define una constante que sí ocupa espacio
// en la memoria y tiene verificación de tipos
// llave = slide switch
#define PIN_SLIDE_SWITCH_ROJO 14
#define PIN_BOTON_AZUL 12
#define PIN_LED_ROJO 5
#define PIN_LED_AZUL 2
// volatile le indica al compilador que no debe asumir que la variable
// no cambia durante la ejecución del código para que no haga
// optimizaciones que asuman esto
// Se lo usa para variables que son controladas por Hw
volatile bool estadoSwitchRojo = LOW;
volatile bool estadoBotonAzul = HIGH;
void setup() {
Serial.begin(9600);
// INPUT_PULLDOWN pone un 1 logico cuando la llave esta cerrada, activa la resistencia pull down
// INPUT_PULLUP pone un 0 logico cuando se apreta el pulsador, activa la resistencia pull up
pinMode(PIN_SLIDE_SWITCH_ROJO, INPUT_PULLDOWN);
pinMode(PIN_BOTON_AZUL, INPUT_PULLUP);
pinMode(PIN_LED_ROJO, OUTPUT);
pinMode(PIN_LED_AZUL, OUTPUT);
digitalWrite(PIN_LED_ROJO, estadoSwitchRojo);
digitalWrite(PIN_LED_AZUL, estadoBotonAzul);
}
void loop() {
// Input
estadoSwitchRojo = digitalRead(PIN_SLIDE_SWITCH_ROJO);
estadoBotonAzul = digitalRead(PIN_BOTON_AZUL);
// Output Leds
// LED Rojo: conectado a GND, se prende con un 1 lógico
digitalWrite(PIN_LED_ROJO, estadoSwitchRojo);
// LED Azul: conectado al positivo, se prende con un 0 lógico
// Como esta conectado a 3.3V, si su pin tambien esta a 3.3V no enciende
// Para que un LED encienda, el ánodo debe estar a un potencial más alto que el cátodo
digitalWrite(PIN_LED_AZUL, estadoBotonAzul);
// Output Consola
Serial.print("Boton: ");
Serial.print(estadoBotonAzul);
Serial.print(" LLave: ");
Serial.println(estadoSwitchRojo);
delay(100);
}