Saltar la navegación

Programa

El algoritmo del programa se basa en ir monitorizando cuándo se activa el sensor de entrada o de salida. En nuestro caso los sensores son 2 Sharp GPD2D12 de infrarrojos. Tenemos una variable entera: coches que nos indica los vehículos que hay dentro del garaje.Se incluye una sencilla función que enciende las luces de aviso según el contenido de la variable coches.

// Barrera para parking This example code is in the public domain.

#include <Servo.h> 

int led1=3, led2=4, led3=5; //Declaramos los leds de indicacion
int in=A4, out=A5; //Sensor entrada pinA4, salida pinA5
int In, Out; //Para almacenar los valores que devuelve cada sensor
Servo barrera; //Creamos un objeto tipo servo
int coches=0; //numero de coches dentro

void setup() { //Configuracion de pines y servo (pin7)

  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
  pinMode(led3, OUTPUT);  
  barrera.attach(7);  
  barrera.write(0); 

}

void loop() {

  indicador(coches); //función que según los coches enciende leds
  In = analogRead(in);
  Out = analogRead(out);

 

  if (In>300)        //Coche quiere entrar

  {

    if(coches<3){    //Si hay plaza libre

      coches=coches+1;
      barrera.write(90);  //Sube barrera
      indicador(coches);

      while (In>300 || Out >300){ //Espera que pase el coche

        In = analogRead(in);
        Out = analogRead(out);

      } 

      delay(1500);
      barrera.write(0);    //Baja barrera
      delay(3000);

    }

  }

if (Out>300){    //Coche quiere salir

      coches=coches-1;
      barrera.write(90);    //Sube barrera
      indicador(coches);

      while (In>300 || Out >300){ //Espera que pase el coche

        In = analogRead(in);
        Out = analogRead(out);

      } 

      delay(1500);
      barrera.write(0);    //Baja barrera
      delay(3000);

    }

void indicador(int coches){

  switch (coches){

    case 0:

      digitalWrite(led1, HIGH); 
      digitalWrite(led2, HIGH); 
      digitalWrite(led3, HIGH); 
      break;

    case 1:

      digitalWrite(led1, HIGH); 
      digitalWrite(led2, HIGH); 
      digitalWrite(led3, LOW); 
      break;

    case 2:

      digitalWrite(led1, HIGH); 
      digitalWrite(led2, LOW); 
      digitalWrite(led3, LOW); 
      break;

    case 3:

      digitalWrite(led1, LOW); 
      digitalWrite(led2, LOW); 
      digitalWrite(led3, LOW); 
      break;

  }

}