problema con lo sketch

Salve a tutti. Sapreste indicarmi come far rimanere costante il segnale proveniente da un pulsante? Faccio un banale esempio: quando premo il primo pulsante il led deve rimanere acceso fino a quando non viene premuto il secondo pulsante. Grazie in anticipo.

Ciao,
devi creare una variabile stato che inizializzi con 0; la logica è che se stato =0 allora sei nella posizione iniziale dove il led è spento, una volta che premi il primo pulsante lo stato lo fai diventare 1 e gli dici che se stato è uguale ad 1 allora il led deve stare acceso; poi gli dici se premo il secondo pulsante allora stato lo fai diventare di nuovo 0 e se stato =0 ti ritrovi come all’inizio quando il led stava spento.
Prova con questo sketch collegando il led al pin3 e i due pulsanti ai pin 10 e 11:

int ledPin=3; //(pin del led)
int ledState=0; //stato del led
int button1=10; //pin primo pulsante
int button2=11; //pin secondo pulsante
int state1pulsante; //stato primo pulsante
int state2pulsante; //stato secondo pulsante

void setup() {
pinMode(button1,INPUT);
pinMode(button2,INPUT);
pinMode(ledPin,OUTPUT);

}
void loop() {
state1pulsante=digitalRead(button1);
state2pulsante=digitalRead(button2);

if (state1pulsante==HIGH) ledState=1;

if (state2pulsante==HIGH) ledState=0;

if (ledState==1) digitalWrite(ledPin,HIGH);
else digitalWrite(ledPin,LOW);
}

Si è giusto ciò che dice baldursgate, ma puoi anche utilizzare un solo pulsante: quando leggi che il pulsante è stato premuto (valore 1 o 0 a seconda del collegamento) cambi il valore della variabile e spegni/accendi il led di conseguenza. ovvero:

pulsante= digitalRead(pulsante_pin);
if(pulsante){ // se vuoi leggere gli 1, altrimenti metti !pulsante
  stato= !stato;  //cambi da 0 a 1 e viceversa
  digitalWrite( led_pin, stato);  //accende se è 1, spegne se è 0
}

salvatore_94 , hai programmato un oscillatore pilotato da un pulsante.

Se vuoi fare questo devi andare sui cambi di stato e fare anche il debounce.

Vedi esempio http://www.arduino.cc/en/Tutorial/Switch

Ciao Uwe

Grazie a tutti per le risposte.

Hai ragione uwe, dimenticavo il problema del solito debounce dei pulsanti (fastidioso problema)

Ho dimenticato anche io l'effetto rimbalzo dei pulsanti... Per dare il tempo ad Arduino di acquisire l'INPUT introduci nel loop un delay di alcuni millisecondi, io di solito metto 250ms :)

250ms è molto. Di solito bastano 15 o 20 ms.

Si hai ragione PaoloP :drooling_face: .