dado con arduino

salve a tutti per la mia tesina di maturità avevo pensato di programmare un dado elettronico pilotato ovviamente da arduino,
non essendo molto abile con il linguaggio di programmazione mi servirebbe una mano nello sketch del programma, volevo utilizzare la funzione "random" impostando come minimo e massimo il numero di facce del dado (min=1, MAX =6) ! il programma finale dovrà essere che premendo manualmente un tasto oppure passando davanti ad un sensore la funzione random si attivi e dia come risultato un numero da 1 a 6 alla quale uscita di ogni risultato saranno collegati sei led luminosi che si illumineranno in base a cosa uscirà( ad esempio esce 3 e si illuminano 3 led) , spero di essere stato abbastanza chiaro, inoltre vorrei sapere che tipo di arduino andrebbe bene , grazie in anticipo!

Di solito i post con "URGENTE" nel titolo vengono automaticamente cestinati. Strano... devono aver disattivato il Mod Leo 9000. :grin:

Venendo al tuo progetto, come Arduino puoi usare tranquillamente l'Arduino UNO. Più che sufficiente per comandare 6 led e un pulsante o sensore.
Per lo sketch, inizia a buttare giù un po' di codice, poi lo correggiamo tutti insieme. (non ci sono solo io qui ;))

Puoi anche cercare con un motore di ricerca varie parole chiave tipo: Dado Arduino, Dado Elettronico, ecc.

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

PaoloP:
Di solito i post con "URGENTE" nel titolo vengono automaticamente cestinati. Strano... devono aver disattivato il Mod Leo 9000. :grin:

In questi ultimi periodi sono impegnato e quindi controllo ogni tanto il forum. Ho tolto "urgente" dal titolo. :roll_eyes: :roll_eyes:

@bellasato:
mettendo "arduino random dice" su Google ho ottenuto 3.850.000 risultati... Con tanto di codice, veramente un sacco di cose da leggere. Per attivare il "lancio" puoi usare una fotoresistenza coperta dalla mano oppure un semplice pulsantino da premere.

PS:
la funzione "random" dell'Arduino è tutto fuorché random. Ad ogni accensione riceverai indietro sempre la stessa sequenza numerica, tempo fa ho scritto una libreria che è molto più casuale della funzione integrata, la pRNG.

Ad esempio (schema e codice):
http://nickthecoder.co.uk/pinkwino/view/Arduino_Dice

Il dado é piú casuale se fai partire un contatore veloce alla pressione del tasto e lo fermi quando viene mollato il tasto. Una persona non sa premere il tasto con tempi cosí precisi da poter ripetere i numeri.

Ciao Uwe

il codice da me fatto è il seguente :
PROGRAMMA DI UN DADO LED CHE EMETTE UNA COMBINAZIONE OGNI TEMPO X

#define LED_A 13
#define LED_B 12
#define LED_C 11
#define LED_D 10   //ASSOCIO AD OGNI NUMERO
#define LED_E  9   //IL PROPRIO CODICE
#define LED_F  8
#define LED_G  7

int dado=0;     //DO ALLA VARIABILE DADO IL VALORE 0

void setup() 
{
  pinMode(LED_A,OUTPUT);
  pinMode(LED_B,OUTPUT);
  pinMode(LED_C,OUTPUT);   //INDIRIZZO I LED
  pinMode(LED_D,OUTPUT);   // IN USCITA
  pinMode(LED_E,OUTPUT);
  pinMode(LED_F,OUTPUT);
  pinMode(LED_G,OUTPUT);
}

void reset() 
{
  digitalWrite(LED_A,LOW);
  digitalWrite(LED_B,LOW);  
  digitalWrite(LED_C,LOW);  //RESETTO TUTTI I LED
  digitalWrite(LED_D,LOW);  // COSI PARTONO DA 0
  digitalWrite(LED_E,LOW);
  digitalWrite(LED_F,LOW);
  digitalWrite(LED_G,LOW);
}

void loop() {
  dado=random(1,6);   //DO AL DADO UN VALORE RANDOM DA 1 A 6
  switch (dado) 
{
    case 6:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_C,HIGH);
      digitalWrite(LED_E,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);
    break;
    case 5:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_D,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);    
    break;
    case 4:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);        
    break;
    case 3:
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_D,HIGH);
      digitalWrite(LED_F,HIGH);    
    break;
    case 2:
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_F,HIGH);    
    break;
    case 1:
      digitalWrite(LED_D,HIGH);    
    break;
  }
  delay(X); // TEMPO DECISO
  reset();  //PORTA TUTTO A ZERO
}

il problema di questo programma (anche se non so se sia giusto) è che crea una combinazione ogni tempo x e a me servirebbe modificarlo al fine di generare un numero quando premi un pulsante o quando passi davanti a un sensore

Certo se tu avessi voluto fare invece il gioco del "testa o croce" sarebbe stato molto più semplice.
Per l'occasione, invece di "testa o croce", lo avremmo chiamato "lato componenti o lato saldature"... XD

Per mettere un bottone potresti provare così:

#define LED_A 13
#define LED_B 12
#define LED_C 11
#define LED_D 10   //ASSOCIO AD OGNI NUMERO
#define LED_E  9   //IL PROPRIO CODICE
#define LED_F  8
#define LED_G  7
#define buttonPin 2

int buttonState;
int dado=0;     //DO ALLA VARIABILE DADO IL VALORE 0

void setup() 
{
  pinMode(LED_A,OUTPUT);
  pinMode(LED_B,OUTPUT);
  pinMode(LED_C,OUTPUT);   //INDIRIZZO I LED
  pinMode(LED_D,OUTPUT);   // IN USCITA
  pinMode(LED_E,OUTPUT);
  pinMode(LED_F,OUTPUT);
  pinMode(LED_G,OUTPUT);
  pinMode(buttonPin,INPUT);
  randomSeed(analogRead(0));
}

void reset() 
{
  digitalWrite(LED_A,LOW);
  digitalWrite(LED_B,LOW);  
  digitalWrite(LED_C,LOW);  //RESETTO TUTTI I LED
  digitalWrite(LED_D,LOW);  // COSI PARTONO DA 0
  digitalWrite(LED_E,LOW);
  digitalWrite(LED_F,LOW);
  digitalWrite(LED_G,LOW);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
    dado=random(1,7);   //DO AL DADO UN VALORE RANDOM DA 1 A 6
    switch (dado) 
    {
    case 6:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_C,HIGH);
      digitalWrite(LED_E,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);
    break;
    case 5:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_D,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);    
    break;
    case 4:
      digitalWrite(LED_A,HIGH);
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_F,HIGH);
      digitalWrite(LED_G,HIGH);        
    break;
    case 3:
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_D,HIGH);
      digitalWrite(LED_F,HIGH);    
    break;
    case 2:
      digitalWrite(LED_B,HIGH);
      digitalWrite(LED_F,HIGH);    
    break;
    case 1:
      digitalWrite(LED_D,HIGH);    
    break;
    }
    delay(X); // TEMPO DECISO
    reset();  //PORTA TUTTO A ZERO
  }
}

Con il bottone collegato al pin2, in modo che sia a livello alto quando è premuto.
Una volta serviva il " randomSeed(analogRead(0));" nel setup per renderlo "realmente" casuale, adesso non so se serve ancora :cold_sweat:
Un po di tempo fa avevo fatto questa guida se ti può essere utile http://www.instructables.com/id/Arduino-Led-Dice/

Ah, prima avevi messo " dado=random(1,6)", che genera un numero tra 1 e 5..."dado=random(1,7)" è giusto :wink:

Ciao :D!

@bellasato:
per favore includi il codice usando gli appositi tag.

bellasato:
il problema di questo programma (anche se non so se sia giusto) è che crea una combinazione ogni tempo x e a me servirebbe modificarlo al fine di generare un numero quando premi un pulsante o quando passi davanti a un sensore

Leggi qui:
http://arduino.cc/en/tutorial/button
Alla pressione del pulsante, fai eseguire tutto il codice.

In questi casi, a mio avviso, la soluzione più "pulita" consiste nel mettere all'inizio del loop il richiamo ad una funzione
lancia, quindi dado = lancia(), che potrebbe essere fatta con questa logica:

int lancia()

  • attende che venga premuto il pulsante
  • quando viene premuto, restituisce un valore da 1 a 6 che puoi costruire mediante micros(), sarà abbastanza casuale