Salve sono un ragazzo al quinto anno di elettronica e all'esame vorrei portare un piccolo parcheggio automatizzato tramite arduino. Ammetto che non ne capisco molto di programmazione. Il mio progetto è formato da un display 7 segmenti, diodi laser e fotoresistenze che funzionano da sensore per far aprire e chiudere le 2 sbarre sostenute dai 2 servomotori. Il mio intento e quello di contare le auto (fino a 9) per poi non far aprire più la sbarra dell'ingresso. Il problema sta nel fatto che non so come far incrementare il numero dei posti auto in quanto nel seguente codice se io mi fermo davanti ai sensori il numero dei posti sale sempre. Come posso correggere questo codice?
#include <Servo.h>
Servo serIN;
Servo serOUT;
const int a=5;
const int b=4;
const int c=3;
const int d=2;
const int e=1;
const int f=6;
const int g=7;
int LedV=13;
int LedR=12;
int posti_auto;
int sen4;
int sen3;
int sen2;
int sen1;
void LedAcceso(int n){
switch(n)
{
case 0:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
break;
case 1:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 2:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 3:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 4:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 5:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 6:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 7:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 8:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 9:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
}
};
void setup()
{
serIN.attach(10);
serOUT.attach(11);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(LedV, OUTPUT);
pinMode(LedR, OUTPUT);
serIN.write(140);
serOUT.write(140);
}
void loop () {
int sen4 = analogRead(A5);
int sen3 = analogRead(A4);
int sen2 = analogRead(A3);
int sen1 = analogRead(A2);
LedAcceso(posti_auto);
if(posti_auto < 0){
posti_auto=0;
}
if(posti_auto < 9){
digitalWrite(LedR, LOW);
digitalWrite(LedV, HIGH);
if(sen1 < 100){
delay(100);
serIN.write(60);
}
if(sen2 < 50){
delay(100);
serIN.write(140);
posti_auto++;
}
} else{
digitalWrite(LedV, LOW);
digitalWrite(LedR, HIGH);
}
if(sen3 < 20){
delay(100);
serOUT.write(60);
}
if(sen4 < 80){
delay(100);
serOUT.write(140);
posti_auto--;
}
}
