help

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.

Grazie per il supporto

Ciao,
inizia a postare il codice che hai creato e lo schema delel connesisoni magari così rendi agevole un intervento altrui.
G.

Grazie per la risposta.Come faccio ad allegare lo sked?

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 :smiley:

Ciao
In ogni case, alla fine delle istruzioni devi metter un break

come da esempio su http://arduino.cc/en/Reference/SwitchCase

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
}

Ciao Uwe

Grazie
per quanto riguarda la sintassi tutto ok. é il resto che non và. cerco di inserire il listato e lo schema.

Sí, non é un idea malvagia.
Ciao Uwe

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) ::slight_smile:
E se non comprendi qualcosa, io sono qua.. :wink:

--- corretto piccolo errore di logica ... :stuck_out_tongue:

Urca! me lo devo studiare.....mi sa che per il week end non devo prendere impegni.

Grazie a tutti per ora