Cronometro particolare x gare di pattinaggio

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.