Problema controllo Led con Leonardo

Salve
Ho da poco comprato una scheda Leonardo e per provarla le ho caricato il programma esempio "Button".
Il problema è questo: Il Led non si spegne mai ma riduce solo la sua luminosità quando dovrebbe essere spento e l'aumenta quando dovrebbe essere acceso.

int led = 13;
int interruttore = 12;
int val = 0;

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(interruttore, INPUT);
}
  
void loop()
{
  val = digitalRead(interruttore);
  if(val == HIGH){
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}

Ho notato inoltre che se metto un ritardo alla fine del programma "Button" il Led si spegne completamente poi per un piccolissimo instante si riaccende e quindi si rispegne.

void loop()
{
  val = digitalRead(interruttore);
  if(val == HIGH){
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
    delay(800);
  }
}

Ciò non avviene se la loggica di funzionamendo è inversa cioè: se imposto il programma in modo da far spegnere il Led quando il Pin di comando è alto (in questo caso il Led o è spento o è acceso).

int led = 13;
int interruttore = 12;
int val = 0;

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(interruttore, INPUT);
}
  
void loop()
{
  val = digitalRead(interruttore);
  if(val == HIGH){
    digitalWrite(led, LOW);
  }
  else {
    digitalWrite(led, HIGH);
  }
}

Per altri programmi come il "Blink" funziona tutto correttamente.

Da cosa può dipendere?

Grazie in anticipo.

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Posta il tuo codice (negli appositi tag code, vedi sezione 7 regolamento che spiega come fare)
e anche una foto o un disegnino di come hai fatto i collegamenti.
Senza queste info difficile darti delle risposte.

Tieni conto che quando premi un pulsante ci sono falsi contatti. La loop() viene eseguita di continuo molto velocemente. Mentre premi il pulsante, il pin digitale potrebbe dare molti segnali high,low prima di diventare stabilmente HIGH.
Per risolvere si implementa un debounce hardware o software. Cerca debounce nel forum.
http://forum.arduino.cc/index.php?topic=232975.msg1678352#msg1678352

Come Led utilizzo quello presente sulla scheda "L" che corrisponde al Pin 13 mentre come interruttore utilizzo un ponte trà il pin Vcc della scheda e il Pin 12 che stacco o collego all'occorrenza (poco ortodosso ma era per provarlo al volo)

Ci avevo pensato anche io ma il fatto è che anche se scollego il pulsante (quindi al Pin 12 non è collegato NIENTE) e ricarico il programma da computer ripartendo da zero (continuando a non intervenire sul Pin 12) il Led è già poco luminoso.
Non capisco questa via di mezzo che dovrebbe verificarsi solo se gli dessi dei cicli di accensione e spegnimento veloci che farebbe accendere e spegnere velocemente il Led ma che all'occhio umano (data la velocità) semprerebbe solo meno luminoso ma questi cicli non si dovrebbero verificare perche il Pin 12 non può essere in nessun modo nello stato HIGH.
Mmmh comincio a pensare che sia la scheda ad avere qualche problema o c'è qualcosa di sbagliato nell' "if"

Fabiano-V:
Come Led utilizzo quello presente sulla scheda "L" che corrisponde al Pin 13 mentre come interruttore utilizzo un ponte trà il pin Vcc della scheda e il Pin 12 che stacco o collego all'occorrenza (poco ortodosso ma era per provarlo al volo)

Occhio che i pin in ingresso sono ad alta impedenza e NON devono mai essere lasciati flottanti ... quindi ... o resistenze di pull-up o di pull-down , mai senza nulla, o ... sentono anche il passare di una mosca XD XD XD

Guglielmo

:astonished: Cavolo a questo proprio non ci avevo pensato.
Grazie mille risolto.