Buongiorno, sto usando da poco tempo Arduino 2009. Per familiarizzare con il C++ ho provato a realizzare questo piccolo progetto. Ho costruito una scheda con otto led verdi e rossi che ho collegato tramite un cavetto alle porte digitali di Arduino. Sono riuscito a creare delle sequenze di accensione e spegnimento(per adesso tre) che funzionano. L'idea era quella di collegare un interruttore a pulsante, collegarlo ad un pin. Questo pin assume due valori, HIGH quando il pulsante è premuto e LOW quando viene rilasciato(il pin in questo caso è collegato a massa tramite la resistenza). Premendo una volta il pulsante doveva partire la prima sequenza, due volte la seconda ecc.Per fare questo ho usato una parte dell'esempio 03C che è sul manuale di A. Alla fine (riferendomi a questo esempio) se la variabile numerica state è == 1 si dovrebbe incrementare la variabile numerica in modo che usando il comando "switch" A. potesse eseguire la sequenza desiderata. Mi succede invece che le sequenze vengono eseguite una dopo l'altra indipendentemente dallo stato del pulsante.
Mi rendo conto che è difficile dare un aiuto non vedendo il programma, ma se qualcuno mi volesse aiutare potrei mandarlo.
Dal PC > Arduino > Edit > Copy for Forum (Ctrl+Maiusc+T)
Poi nella risposta al forum..dovresti incollare tra due tag CODE quello che hai copiato dal programma.
Ciao
P.S. lo schema invece puoi fare pure un disegnino con paint
switch (var) {
case 1:
//do something when var equals 1 break;
case 2:
//do something when var equals 2 break;
default:
// if nothing else matches, do the default
// default is optional
}
Credo che il problema che Giulio vuole risolvere sia legato al fatto di utilizzare un unico pulsante per dare il comando (in modo simile a come si fa con il mouse con click e doppio click).
Per ottenere valori diversi con un solo pulsante dovresti procedere così:
#define PIN 2 //pin assegnato al tasto
unsigned int conta = 10;//ritardo massimo tra una pressione e l'altra (10 = 1 secondo)
char comando = 0;//numero pressioni del tasto
char tasto = 0;//memoria stato tasto
while( conta > 0 ){ //ciclo per attesa comandi
if( digitalRead(PIN) == 0 && comando != 0 ){ //se il tasto non è premuto
delay(100); //applica step ritardo
conta--; //decrementa conteggio per ritardo
}
if( tasto != digitalRead(PIN) ){//se stato tasto è modificato
delay(10); //per antirimbalzo
if( digitalRead(PIN) == 1 ){ //se il tasto è premuto
tasto = 1;
comando++; //incrementa il comando
} else {
tasto = 0; //azzera memoria tasto
}
}
}
Chiaramente il risultato (quante volte hai premuto il tasto) sarà nella variabile comando
Controlla bene il codice perchè l'ho buttato giù cosi al volo (spero di non aver commesso errori) :
E se non comprendi qualcosa, io sono qua..