Ti sottopongo alcune osservazioni prima delle correzioni. Sono osservazioni di "best practice"
- Le definizioni (#define) e le variabili (val) mettile sempre PRIMA della parte void setup. In questo modo sono "visibili" da qualunque parte del tuo programma
- I pinMode() conviene metterli all'inizio della sezione void setup
Altre osservazioni sugli errori:
- Il pinMode del BUTTON va "ancorato" HIGH usufruendo del parametro INPUT_PULLUP
- Non usare init() per lcd, usa begin().
- Non "sprecare" spazi sul display, al posto di "CORSIA 1 - " basta "CORSIA 1 " altrimenti il tempo non riesci a scriverlo in 20 caratteri
Correggi così:
#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 BUTTON 11
int val;
void setup()
{
pinMode(BUTTON, INPUT_PULLUP);
lcd.begin(); // 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 ");
}
void loop()
{
val = digitalRead(BUTTON);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(0,9);
lcd.print("PRONTA ");
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(0,9);
lcd.print("NON ATTIVA");
}
//continuare per gli altri pulsanti e corsie
}
Ciao,
P.