const int rstX = 5, rstY = 6;
void setup() {
pinMode(rstX, INPUT_PULLUP);
pinMode(rstY, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if ( !digitalRead(rstX) && !digitalRead(rstY) ) {
Serial.println("setup");
delay(500);
DROsetup();
}
if (!digitalRead(rstY)) Serial.println("rstY");
if (!digitalRead(rstX)) Serial.println("rstX");
Serial.println("loop");
delay(500);
}
void DROsetup() {
Serial.println("DROsetup");
while ( ( digitalRead(rstX) && digitalRead(rstY)) ) {
Serial.println("while");
if (!digitalRead(rstX)) {
Serial.println("WrstX");
}
if (!digitalRead(rstY)) {
Serial.println("WrstY");
}
}
}
salve gente, perchè in questo sketch quando sono nel ciclo while, premendo uno dei due pulsanti (e tra l'altro non esegue gli if interni) mi esce dal ciclo, quando la condizione del while è la pressione dei due tasti contemporaneamente? dov'è l'errore?
edit: esce dal ciclo dopo 1-2-3 pressioni di un singolo tasto, così a random.
Non c'è errore, il programma si comporta come deve, mi stupirebbe il contrario.
Il ciclo while ricomincia quando la condizione specificata dentro le parentesi è vera, cioè
while( 1 ) o while ( true ) sono cicli infiniti.
while ( 0 ) o while (false ) non esegue alcun ciclo neanche uno.
Quindi il risultato della espressione:
digitalRead(rstx) && digitalRead(rsty) è true se non premi alcun pulsante poiché sono entrambe gli ingressi con pull-up. Mentre il risultato sarà false appena premi uno o entrambe i pulsanti e ovviamente il while termina di ciclare.
grazie.
scusa ma non mi è chiaro il concetto. la condizione è una AND, quindi dovrebbe essere true quando tutti e due i pulsanti sono low. se avessi messo un OR allora si, bastava un solo pulsante. non è così?
ho messo i pulsanti in pull-down ma è lo stesso: premendo i due pulsanti insieme entra in while, cicla, ma se premo uno dei due pulsanti esce.
io vorrei uscire dal ciclo while solo premendo insieme i due pulsanti
Nota: che intendi con "i pulsanti in pull-down"? Io interpreto che i pulsanti tirano giù a massa.
Con le resistenze di pull-up, i pulsanti vanno verso massa; con le resistenze di pull-down, i pulsanti vanno verso il positivo. Non è pignoleria, ma se non si è precisi si rischia di dire l'opposto di ciò che si vorrebbe dire.