...errore di programma?

Ciao, premetto che non conosco quasi per niente Arduino e il C...

Comunque io volevo fare una specie di deviatore... Usando il codice:

#define led1 13
#define led2 12
#define button 2
int statobutton = 0;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(button, INPUT);
}
void loop() {
statobutton = digitalRead(button);
  
if(statobutton == HIGH){
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
 }
else{
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
}
}

ma quando si preme il pulsante non succede niente....

sapete aiutarmi?

Ringrazio anticipatamente,

Alan

Ciao, se tieni premuto il pulsante funziona? Ho idea che non ti sembra succedere nulla perchè se premi e rilasci i led si aggiornano prima che il tuo occhio possa accorgersene. Per correttezza ti dico anche che devi effettuare il debounce sulla lettura del pulsante onde evitare false letture, per la prova che stai facendo poco importa ma per la realizzazione finale si :wink:

Non essendoti ancora presentato Ti invitiamo a presentarti QUI
(dicci quali conoscenze hai di elettronica e di programmazione) e a leggere il regolamento QUI
se non lo hai già fatto.

Comunque benvenuto sul forum.

Attilio

Dando per scontato che la parte HW sia corretta con quel codice stai dicendo al micro di invertire le luci fin tanto che il pulsante è premuto. Se quindi vai a premere il pulsante al massimo vedrai un cambiamento rapido dei LED per poi ritornare subito allo stato iniziale.
Era questo il risultato che volevi raggiungere? Oppure un circuitino che ad ogni pressione del tasto inverte i LED?

Hai usato un resistore di pull down?

Senza di questo l'input assume un valore casuale (HIGH o LOW) quando il pulsante non è premuto.

Usando invece il resistore di pull up interno

(pinMode(button, INPUT_PULLUP);

puoi evitare il resistore esterno, ma devi invertire la logica

statobutton = digitalRead(button);

if(statobutton == LOW) {

cyberhs:
Hai usato un resistore di pull down?

Senza di questo l'input assume un valore casuale (HIGH o LOW) quando il pulsante non è premuto.

Usando invece il resistore di pull up interno

(pinMode(button, INPUT_PULLUP);

puoi evitare il resistore esterno, ma devi invertire la logica

statobutton = digitalRead(button);

if(statobutton == LOW) {

Buona sera, vi ringrazio tutti quanti, per avermi risposto..... ma continua a non funzionare....
Ho provato a seguire il consiglio di "cyberns" ma non funziona.
Alla domanda di RobertoBochet rispondo così: io vorrei che quando il pulsante è rilasciato il led1 si accenda, mentre quando si pigia sul pulsante sia acceso solo il led2...

Alan

E allora anche in caso di mancato debounce dovrebbe funzionare, quindi l'HW rimane l'unico problema possibile.

Ma il pulsante come lo hai collegato? hai messo una resistenza?

Ciao Uwe

non ho messo nessuna resistenza

Potresti postare uno schema?

si

Potresti postarlo qui?

ho dei problemi con il caricamento dell'immagine....
DropBox????

Eh no, se non inserisci le resistenze di pulldown non vai lontano

Quindi.... che devo fare?

Fare*

Devi inserire, come ti è già stato consigliato, una resistenza di pull-up o di pull-down a seconda delle tue esigenze.
Per quanto riguarda la resistenza di pull-up puoi attivare anche quella interna di arduino.

RESISTENZA DI PULL-UP: In uscita avremo lo stato logico HIGH senza premere il pulsante, premendo il pulsante avremo lo stato logico LOW.

RESISTENZA DI PULL-DOWN: In uscita avremo lo stato logico LOW senza premere il pulsante, premendo il pulsante avremo lo stato logico HIGH

Attilio

vi ringrazio, ma non ho capito cosa intendete per attivare le resistenze pull-up/down....
io continuo a ringraziarvi

Alan

@alanmasutti: i pin in ingresso di Arduino sono ad alta impedenza e, se li lasci non connessi, NON hanno uno stato logico proprio, ma completamente aleatorio e variabile!

Se vuoi garantirti che un pin non connesso sia sempre a livello LOW o a livello HIGH devi usare delle resistenze delle di pull-down se lo collegano a GND (LOW) o di pull-up se lo collegano a +Vcc (HIGH).

Comunque ... queste sono le BASI e ... prima di iniziare qualsiasi progetto (in generale), per riuscire a capire quello che fa, almeno le basi uno dovrebbe studiarsele :wink:

Guglielmo