Práctica 4 Semáforo con interruptor
En esta ocasión crearemos un semáforo con tiempos inferiores a los reales, para poder probarlo más rápidamente. Introducimos un pulsador para ir conmutando entre semáforo y otras funciones como dejar encendido un led rojo, etc.
Funcionamiento
Monta el circuito y carga el programa al arduino.
Inicialmente todos los leds deben estar apagados.
Al pulsar una vez el botón, se activará el modo semáforo.
Si pulsamos otra vez se enciende solo el led rojo.
Si pulsamos una tercera vez se enciende el led ambar.
Si pulsamos una cuarta vez se encience el led verde.
Al pulsar una quinta vez el contador se pone a cero, se apagan todos los leds, y se vuelve a repetir este proceso

Instalación
Sketche
//Semaforo controlado por pulsador
void encendersemaforo();
//const int buttonPin = 2; // PULSADOR
int ledPin1 = 8; //LED VERDE
int ledPin2 = 9; //LED AMBAR
int ledPin3 = 10; //LED ROJO
int contador = 0;
long tpo = millis();
void setup()
{
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
// pinMode(buttonPin, INPUT);
attachInterrupt(0, Fon_Contar, RISING);
}
void loop ()
{
switch (contador)
{
case 0: // APAGA TODOS LOS LEDS
digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
break;
case 1: // ENCIENDE EL SEMAFORO
encenderSemaforo();
break;
case 2: // ENCIENDE EL LED ROJO
digitalWrite(ledPin1,LOW); // APAPGA VERDE
digitalWrite(ledPin2,LOW); // APAGA AMBAR
digitalWrite(ledPin3,HIGH); // ENCIENDE ROJO
break;
case 3: // ENCIENDE EL LED AMBAR
digitalWrite(ledPin1,LOW); // APAPGA VERDE
digitalWrite(ledPin2,HIGH); // ENCIENDE AMBAR
digitalWrite(ledPin3,LOW); // APAGA ROJO
break;
case 4: // ENCIENDE EL LED VERDE
digitalWrite(ledPin1,HIGH); // ENCIENDE VERDE
digitalWrite(ledPin2,LOW); // APAGA AMBAR
digitalWrite(ledPin3,LOW); // APAGA ROJO
break;
case 5: // REINICIA EL CONTADOR
contador= 0;
break;
}
}
void Fon_Contar() // Este contador cuenda cada vez que el pulsador pasa de estado LOW a HIGH
{
contador++;
Serial.println(contador);
if (contador > 4) contador = 0;
}
void encenderSemaforo()
{
delayx(500);
digitalWrite(ledPin1, HIGH); // VERDE
delayx (2500);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH); // AMBAR
delayx(200);
digitalWrite(ledPin2, LOW);
delayx(200);
digitalWrite(ledPin2, HIGH); // AMBAR
delayx(200);
digitalWrite(ledPin2, LOW);
delayx(200);
digitalWrite(ledPin2, HIGH); // AMBAR
delayx(2000);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH); // ROJO
delayx(2000);
digitalWrite(ledPin3, LOW);
}
void delayx(int valor)
{
long tpo = millis();
while ((( millis() - tpo) < valor) && (contador == 1))
;
}
Comentarios
Publicar un comentario