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; } }