ciao a tutti,
devo scrivere un codice per far funzionare un semaforo nel seguente modo:
quando la temperatura è maggiore di dieci gradi funziona normalmente, con la possibilità per i pedoni di chiamare l'attraversamento. La luce verde dei pedoni deve lampeggiare un po' prima di tornare rossa;
quando la temperatura è minore di dieci gradi il semaforo lampeggia tutto il tempo a luce gialla, sempre con la possibilità per i pedoni di chiamare l'attraversamento come nel caso di sopra.
secondo voi è giusto il codice che ho scritto? per leggere la temperatura pensavo di usare un TMP36.
copio il codice che ho scritto qui sotto.
#define autoRosso 10
#define autoGiallo 11
#define autoVerde 12
#define pedoniRosso 9
#define pedoniVerde 8
#define pulsantePedonale 2
#define verde 0
#define chiamata 1
#define giallo 2
#define rosso 3
int stato; // Stato del semaforo
int val_Adc = 0;
float temp = 0;
void setup()
{
pinMode(autoRosso, OUTPUT);
pinMode(autoGiallo, OUTPUT);
pinMode(autoVerde, OUTPUT);
pinMode(pedoniRosso, OUTPUT);
pinMode(pedoniVerde, OUTPUT);
pinMode(pulsantePedonale, INPUT);
stato = verde;
}
void loop()
{
val_Adc = analogRead(0);
temp = ((val_Adc * 0.00488) - 0.5) / 0.01;
if (temp >= 10) {
switch(stato)
{
case verde:
digitalWrite(autoRosso, LOW);
digitalWrite(autoGiallo, LOW);
digitalWrite(autoVerde, HIGH);
digitalWrite(pedoniVerde, LOW);
digitalWrite(pedoniRosso, HIGH);
while( digitalRead(pulsantePedonale) == 0); //????
delay(15000);
stato = giallo;
break;
case giallo:
digitalWrite(autoGiallo, HIGH);
delay(5000);
while( digitalRead(pulsantePedonale) == 0); //????
stato = rosso;
break;
case rosso:
digitalWrite(autoVerde, LOW);
digitalWrite(autoGiallo, LOW);
digitalWrite(autoRosso, HIGH);
digitalWrite(pedoniRosso, LOW);
digitalWrite(pedoniVerde, HIGH);
delay(10000);
int counter = 0;
if(counter <= 10){
digitalWrite(pedoniVerde, LOW);
delay(200);
digitalWrite(pedoniVerde, HIGH);
delay(200);
counter == counter + 1;
}
stato = verde;
break;
}
}
else {
digitalWrite(autoRosso, LOW);
digitalWrite(autoGiallo, HIGH);
digitalWrite(autoVerde, LOW);
digitalWrite(pedoniVerde, LOW);
digitalWrite(pedoniRosso, HIGH);
delay(1000);
digitalWrite(autoGiallo, LOW);
delay(1000);
if( digitalRead(pulsantePedonale) == 1){
digitalWrite(autoGiallo, LOW);
digitalWrite(autoRosso, HIGH);
digitalWrite(pedoniRosso, LOW);
digitalWrite(pedoniVerde, HIGH);
delay(10000);
int counter = 0;
if(counter <= 10){
digitalWrite(pedoniVerde, LOW);
delay(200);
digitalWrite(pedoniVerde, HIGH);
delay(200);
counter == counter + 1;
}
}
}
}