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

Entradas populares de este blog

Práctica Juego SIMON SAYS

Práctica display de 7 segmentos

SENSOR DE SISMOS CON ARDUINO