// definiciones circuito (constantes)
const int pulsadorArriba = 3; // definicion de Pines usados
const int pulsadorAbajo = 2;
const int ledRojo = 7;
const int ledVerde = 9;
const int ledAmarillo = 8;
const int TIEMPO_PULSACION = 200; //Cuanto debo presionar el botón.
int estado = 0; //El estado inicial del equipo es 0.
int Arriba; //Contadores para pulsación válida
unsigned int Abajo;
void setup() {
pinMode(pulsadorArriba, INPUT); // Configuro pulsador como entrada
pinMode(pulsadorAbajo, INPUT);
pinMode(ledRojo, OUTPUT); // Configuro salidas
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
Serial.begin(9600); // Configura puerto serie 9600bps
Serial.println("Hola Arduino!\n");
}
void loop() {
// Verifica el estado de los pulsadores y ejecuta el código correspondiente con switch case
// Leo los botones
bool lecturaArriba = (digitalRead(pulsadorArriba));
bool lecturaAbajo = (digitalRead(pulsadorAbajo));
// borro estados de los botones, por si tuvieron una lectura válida.
bool irArriba = false;
bool irAbajo = false;
// si se suelta el botón, verifico tiempo presionados
if (lecturaArriba == true) {
Arriba++;
// if (Arriba > TIEMPO_PULSACION) Arriba = TIEMPO_PULSACION; // se limita el incremento.
} else {
if (Arriba >= TIEMPO_PULSACION) {
irArriba = true;
}
if (Arriba != 0) Serial.println(Arriba); // ---> Muestra cuanto contó cuando estuvo pulsado!
Arriba = 0; // si no fue una pulsación válida o no, tengo que borrar el tiempo.
}
if (lecturaAbajo == true) {
Abajo++;
// if (Abajo > TIEMPO_PULSACION) Abajo = TIEMPO_PULSACION;
} else {
if (Abajo >= TIEMPO_PULSACION) {
irAbajo = true;
}
if (Abajo != 0) Serial.println(Abajo); // ---> Muestra cuanto contó cuando estuvo pulsado!
Abajo = 0; // si no fue una pulsación válida o no, tengo que borrar el tiempo.
}
switch (estado)
{
case 0: // Precaución
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, LOW);
if (irArriba == true) {
estado = 1; // Detenerse
Serial.println("Cambio a Detenerse.\n");
}
if (irAbajo == true) {
estado = 2; // Pasar
Serial.println("Cambio a Pasar.\n");
}
break;
case 1: //Detenerse
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
if (irAbajo == true) {
estado = 0; // voy a Precaución
Serial.println("Cambio a Precaución.\n");
}
break;
case 2: //Pasar
digitalWrite(ledRojo, LOW); // Enciende el LED rojo cuando está abierto
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, HIGH); // Apaga el LED verde cuando está cerrado
if (irArriba == true) {
estado = 0; // voy a Precaución
Serial.println("Cambio a Precaución.\n");
}
break;
default: // Problema en la ejecución.
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, HIGH);
}
}