ecco quello che ho scritto, ma sicuramente ho fatto un'errore perchè mi segnala un'anomalia.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
#define BUTTONSTART 11 //pulsante di start
#define BUTTON1 A0 //pulsante stop corsia 1
#define BUTTON2 A1 //pulsante stop corsia 2
#define BUTTON3 A2 //pulsante stop corsia 3
#define BUTTON4 A3 //pulsante stop corsia 4
#define LEDVERDE1 2 //led start corsia 1
#define LEDVERDE2 3 //led start corsia 2
#define LEDVERDE3 4 //led start corsia 3
#define LEDVERDE4 5 //led start corsia 4
#define LEDROSSO1 6 //led stop corsia 1
#define LEDROSSO2 7 //led stop corsia 2
#define LEDROSSO3 8 //led stop corsia 3
#define LEDROSSO4 9 //led stop corsia 4
int val;
bool statoCorsia1; //flag corsia1
bool statoCorsia2; //flag corsia2
bool statoCorsia3; //flag corsia3
bool statoCorsia4; //flag corsia4
void setup()
{
startTime = millis();
corsia1Time = millis();
corsia2Time = millis();
corsia3Time = millis();
corsia4Time = millis();
time1 = corsiaTime1 – startTime;
time2 = corsiaTime2 – startTime;
time3 = corsiaTime3 – startTime;
time4 = corsiaTime4 – startTime;
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUTTON3, INPUT_PULLUP);
pinMode(BUTTON4, INPUT_PULLUP);
pinMode(BUTTONSTART, INPUT_PULLUP);
pinMode(LEDVERDE1, OUTPUT);
pinMode(LEDVERDE2, OUTPUT);
pinMode(LEDVERDE3, OUTPUT);
pinMode(LEDVERDE4, OUTPUT);
pinMode(LEDROSSO1, OUTPUT);
pinMode(LEDROSSO2, OUTPUT);
pinMode(LEDROSSO3, OUTPUT);
pinMode(LEDROSSO4, OUTPUT);
digitalWrite(LEDVERDE1, LOW);
digitalWrite(LEDVERDE2, LOW);
digitalWrite(LEDVERDE3, LOW);
digitalWrite(LEDVERDE4, LOW);
digitalWrite(LEDROSSO1, LOW);
digitalWrite(LEDROSSO2, LOW);
digitalWrite(LEDROSSO3, LOW);
digitalWrite(LEDROSSO4, LOW);
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("CORSIA 1:");
lcd.setCursor(0,1);
lcd.print("CORSIA 2:");
lcd.setCursor(0,2);
lcd.print("CORSIA 3:");
lcd.setCursor(0,3);
lcd.print("CORSIA 4:");
//inizializza flag corsie
statoCorsia1 = false;
statoCorsia2 = false;
statoCorsia3 = false;
statoCorsia4 = false;
}
void loop()
{
for (;;) { //inizio loop infinita scansione corsie
val = digitalRead(BUTTON1);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,0);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE1, HIGH);
statoCorsia1 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,0);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO1, LOW);
statoCorsia1 = false;
}
val = digitalRead(BUTTON2);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,1);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE2, HIGH);
statoCorsia2 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,1);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO2, LOW);
statoCorsia2 = false;
}
val = digitalRead(BUTTON3);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,2);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE3, HIGH);
statoCorsia3 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,2);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO3, LOW);
statoCorsia3 = false;
}
val = digitalRead(BUTTON4);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,3);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE4, HIGH);
statoCorsia4 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,3);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO4, LOW);
statoCorsia4 = false;
}
val = digitalRead(BUTTONSTART);
if (val == LOW) {
//è stato premuto il pulsante di start, si esce dalla prima loop infinita
break;
}
} //FINE LOOP INFINITA SCANSIONE CORSIE
}
ciao e grazie
Ivan