mercoledì 26 gennaio 2011

Arduino: lancio del dado (versione 1)

Il lancio del dado per Arduino è davvero un'operazione semplice. Per generare un numero casuale possiamo utilizzare una delle seguenti funzioni:
  • random(max): ritorna un numero compreso fra 0 e max-1;
  • random(min,max): ritorna un numero compreso fra min e max-1;
Per caratterizzare il seme con cui generare una sequenza di numeri casuali possiamo invocare la funzione randomSeed(seme), dove seme è un long int (possiamo passare a randomSeed anche un valore sporco prelevato da uno dei pin analogici di arduino, se inutilizzato nello sketch).
Dopo aver generato un numero casuale e averlo raccolto in una variabile temporanea dobbiamo organizzare l'output. Ho previsto due versioni che si differenziano proprio nel modo in cui esse riportano il risultato (il lancio del dado) all'esterno, di seguito vi parlerò della prima. Qui invece potete vedere la seconda soluzione.
Nella prima soluzione ho pensato di disporre in sequenza 6 led, uno affianco all'altro. Nel codice, il numero casuale generato da Arduino viene analizzato con l'istruzione switch. Ovviamente i possibili casi da differenziare sono 6, avendo fissato i numeri casuali con l'istruzione random(1,7). Ognuno di questi decide, allora, il punto di ingresso all'interno della struttura di controllo switch. Nel codice sorgente, avendo riportato l'istruzione break solo per l'ultimo caso, in base al numero estratto si passerà necessariamente per tutti i casi sottostanti. Ogni caso previsto comanda l'accensione (digitalWrite()) di uno dei 6 led disposti in sequenza sulla breadboard.
Ad esempio, se il numero estratto dalla funzione random() è 5 si accenderanno tutti i led dal quinto al primo, escluso il sesto poiché il punto di ingresso nell'istruzione switch è appunto 5 (che esclude il caso superiore, il sesto led non verrà pertanto acceso). Solo l'ultimo caso prevede, infine, l'uscita dall'istruzione. Qui trovate il codice dello sketch (estrazione di un numero da 1 a 6 ogni 3 secondi).
switch (dado) {
case 6:
digitalWrite(LED6,HIGH);
case 5:
digitalWrite(LED5,HIGH);
case 4:
digitalWrite(LED4,HIGH);
case 3:
digitalWrite(LED3,HIGH);
case 2:
digitalWrite(LED2,HIGH);
case 1:
digitalWrite(LED1,HIGH);
break;
}

2 commenti:

  1. ciao Luca! complimenti per il sito! volevo segnalarti un'applicazione molto interessante con arduino - php con arduino via ubuntu
    http://it.emcelettronica.com/php-con-arduino-ubuntu

    RispondiElimina
  2. Ottimo, la classe PHP per la comunicazione seriale è davvero utile (http://www.phpclasses.org/browse/file/17926.html)!

    RispondiElimina