programmazione con Arduino Nano

Salve, come inizio ho cercato qualche esempio in rete ho trovato "come accendere un led con pulsante" posto qui il codice:

int pinLed=2;
int bottone=5;
int statoLed=LOW;
 
void setup() {                
  pinMode(pinLed, OUTPUT);  
  pinMode(bottone, INPUT);
}
 
void loop() {
  int leggiBottone=digitalRead(bottone);
 
  if (leggiBottone == 1)
  {
     if (statoLed == LOW)
     {
 
       statoLed=HIGH;
       digitalWrite(pinLed, statoLed);
       delay(1000);
 
     } else {
 
       statoLed=LOW;
       digitalWrite(pinLed, statoLed);
       delay(1000);
 
     }
  }
}

il progetto e' realizzato e provato su Arduino Uno io possiedo Arduino Nano non so che versione non c'e' stampato, il problema sta che il led non si accende alla pressione del tasto, se riavvio Arduino Nano scollegandolo e ricollegandolo dalla usb può' rimanere sempre acceso o sempre spento, insomma non ne vuole sapere del pulsante (tramite tester ho controllato il pulsante ed e' funzionante).
il collegamento e' corretto, pin digitale D2 diodo led con negativo a massa, pin digitale D5 pulsante collegato come pull-up....
se aggiungo la siringa per poter utilizzare il monitor seriale :

void setup() {                
  pinMode(pinLed, OUTPUT);  
  pinMode(bottone, INPUT);
  Serial.begin(9600);
}
 
void loop() {
  int leggiBottone=digitalRead(bottone);
   Serial.println(bottone)

alla pressione del pulsante trovo sempre il valore " 1 " o quando e' spendo sempre " 0 " ma non cambia alla pressione del pulsante.
e' possibile avere una spiegazione del problema??
ho provato a far lampeggiare il led senza utilizzo del pulsante e funziona regolarmente...

di seguito elenco la mia configurazione:

Scheda: Arduino Nano
Processore: ATmega328
Porta: COM10
Programmatore: AVRISP mkII
Driver intallato CH340
Sistema : Windows Seven Professional

Grazie

Nel secondo codice che hai postato non hai dichiarato le variabili, o l'hai fatto e non hai copiato quella parte?

Ciao TimoFran, nel secondo codice ho postato solo il cambiamento, cioe' come ho messo l'aggiunta della siringa Serial.begin .......

gerrym30:
[...]
alla pressione del pulsante trovo sempre il valore " 1 " o quando e' spendo sempre " 0 " ma non cambia alla pressione del pulsante.
[...]

Non capisco questa frase... cambia o non cambia? Quando è che trovi 1 e quando è che trovi 0?

non cambia alla pressione del pulsante.... quando collego Arduino Nano alla presa usb il led puo' essere sempre spento o sempre acceso indifferentemente dalla pressione del pulsante, e nel Monitor seriale quando il led e' acceso (sempre) ho valore " 1 " mentre " 0 " quando e' sempre spento...

Se codice e collegamenti sono uguali sia con arduino uno che con arduino nano non ci dovrebbero essere problemi... potrebbe essere la scheda difettata.

>gerrym30: metti lo schema ESATTO dei TUOI collegamenti (... anche un semplice disegno a penna) ...
... vogli capire esattamente come sono collegati bottone e LED ... ::slight_smile:

Guglielmo

  1. serve una resistenza Pullup o Pulldown per dare una stato definito al entrata quando il pulsante non é premuto.
  2. In serie al LED devi mettere una resistenza che limita la corrente.
    Ciao Uwe

La teoria di Uwefed potrebbe essere valida, ora lo provo, nel frattempo ecco lo schema di collegamento....

Hai praticamente violato le più basilari regole ... ed Uwe ci ha visto bene ... due su due ... :grin:

  1. I pin in ingresso degli Atmega sono ad alta impedenza e NON vanno MAI lascati flottanti, ma va SEMPRE imposta una condizione logica stabile e fissa, tramite una resistenza di pull-up o di pull-down.
    Nel tuo caso, visto che il bottone chiude a +5V, DEVI mettere una resistenza di pull-down (verso GND) connessa all'ingresso D5, così da tenerlo normalmente LOW e lascialo andare HIGH solo quando premi il pulsante.

  2. Un LED NON va MAI collegato direttamente come hai fatto tu hai pin di uscita, ma occorre SEMPRE una resistenza che limiti la corrente che scorre in esso ...
    ... ti rammento che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Guglielmo

:o :confused: .. sono stato fortunato! ho fritto le porte D2 D3 D4 D5 >:(
ne codice ho sostituito partendo da D6 ora funziona! :frowning:

Grazie ragazzi siete stati magnifici!