Visualizzazione post con etichetta Dado. Mostra tutti i post
Visualizzazione post con etichetta Dado. Mostra tutti i post

mercoledì 3 giugno 2020

Arduino N° 52 - Numeri casuali con dado a sei facce.




< Segue da Arduino N° 51

 Achille De Santis

> Arduino N°  53







  •   Estrazione di numeri casuali simulando un dado a sei facce.
  •   Visualizzazione su display a 7 segmenti.
  • Uso dei vettori per la definizione di variabili multiple.
  

Achille De Santis V5 del 22-05-2020 








/* 
 * -------------------- Inizio programma --------------------------------------
 * Estrazione numeri casuali con dado a sei facce.
 * Visualizzazione su display a 7 segmenti.
 * Uso dei vettori per la definizione di variabili multiple.
 * Achille De Santis V5 del 22-05-2020
 * ----------------------------------------------------------------------------
 * 
*/

// ------ display ----------------
#define a   13
#define b   12
#define c   11
#define d   10
#define e   9
#define f   8
#define g   7
// --------- comando -------------
#define button  2
// -------------------------------

const int T1=1000;
bool buttonState;
int i;
long ran;
int LED[]= {a,b,c,d,e,f,g};

// --- definizioni cifre ----------
const int uno[]=    {0,1,1,0,0,0,0};
const int due[]=    {1,1,0,1,1,0,1};
const int tre[]=    {1,1,1,1,0,0,1};
const int quattro[]={0,1,1,0,0,1,1};
const int cinque[]= {1,0,1,1,0,1,1};
const int sei[]=    {0,0,1,1,1,1,1};
// ---------------------------------

void setup ()
{
  Serial.begin (9600);
  for (i=0; i<=6; i++)    (pinMode (LED[i], OUTPUT));
  pinMode (button, INPUT_PULLUP);
  prova();
}

void SPENTO()    { for ( i=0; i<=6; i++) {digitalWrite(LED[i], LOW);  }}
void Accendi1()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], uno[i]);      Serial.print(uno[i]);     Serial.print(" "); }} 
void Accendi2()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], due[i]);      Serial.print(due[i]);     Serial.print(" "); }}
void Accendi3()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], tre[i]);      Serial.print(tre[i]);     Serial.print(" "); }}       
void Accendi4()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], quattro[i]);  Serial.print(quattro[i]); Serial.print(" "); }}
void Accendi5()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], cinque[i]);   Serial.print(cinque[i]);  Serial.print(" "); }}
void Accendi6()  { for ( i=0; i<=6; i++) {digitalWrite(LED[i], sei[i]);      Serial.print(sei[i]);     Serial.print(" "); }}

void prova()
{
  SPENTO(); 
  Accendi1(); delay(400);
  Accendi2(); delay(400);    
  Accendi3(); delay(400);
  Accendi4(); delay(400);
  Accendi5(); delay(400); 
  Accendi6(); delay(500);
  SPENTO();
}

void loop()
{
  buttonState = digitalRead(button);
  if (buttonState == LOW)
  {
    SPENTO();
    ran=random(1,7);
    Serial.print("\ta b c d e f g\n");
    Serial.print(ran); Serial.print("\t");  
    switch(ran)
      {
        case 1: Accendi1();  break;
        case 2: Accendi2();  break; 
        case 3: Accendi3();  break;
        case 4: Accendi4();  break; 
        case 5: Accendi5();  break; 
        case 6: Accendi6();  break; 
      }
    Serial.println();
  }
  delay(T1);
}
// ----------------- Fine Programma ---------------------------------------------


Simulazione: 

Argomenti correlati:

Dado Elettronico

Dado Elettronico V2





> Arduino N°  53

mercoledì 30 ottobre 2019

Arduino N° 21 - Dado elettronico con display 7 segmenti

< Arduino N° 20

 Achille De Santis

> Arduino N° 22




Estrazione numeri da un Dado a sei facce (1-6).


Aggiunto un impulso di "strobe" per indicare l'esecuzione del comando.  

/* -------------------------- Inizio Programma -----------------------------------------------------------
  Achille De Santis - 28-04-2018
  V2.0 del 02-07-2019
  dado elettronico con display a 7 segmenti.
  Uso di funzioni per la definizione dei numeri con display 7-segmenti a "catodo comune".
*/

// --------------- I/O ------------------------
#define LED_A     5
#define LED_B     6
#define LED_C     7
#define LED_D     8       //Associo ad ogni segmento il proprio piedino
#define LED_E     9
#define LED_F     10
#define LED_G     11
#define DP            12
#define buttonPin   2
// --------------------------------------------

int buttonState;
long ran;
const int time = 1000;

void setup ()
{
  // ----------------------------------------------
  pinMode(buttonPin, INPUT_PULLUP);
 // -----------------------------------------------

  pinMode(LED_A, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(LED_C, OUTPUT);    // INDIRIZZO I LED IN USCITA E IL PULSANTE IN ENTRATA
  pinMode(LED_D, OUTPUT);
  pinMode(LED_E, OUTPUT);
  pinMode(LED_F, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(DP, OUTPUT);           // impulso di strobe sul "dot point"

  randomSeed(analogRead(0));
}

void strobe() // Impulso di "strobe" per indicare l'immissione del comando
{
  digitalWrite(DP, HIGH);  delay(100);
  digitalWrite(DP, LOW);         // delay(100);
}

void UNO()
{
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_C, HIGH);
}

void DUE()
{
   digitalWrite(LED_A, HIGH);
   digitalWrite(LED_B, HIGH);
   digitalWrite(LED_D, HIGH);
   digitalWrite(LED_E, HIGH);
   digitalWrite(LED_G, HIGH);
}

void TRE()
{
  digitalWrite(LED_A, HIGH);
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_D, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_G, HIGH);
}

void QUATTRO()
{
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_F, HIGH);
  digitalWrite(LED_G, HIGH);
}

void CINQUE()
{
  digitalWrite(LED_A, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_D, HIGH);
  digitalWrite(LED_F, HIGH);
  digitalWrite(LED_G, HIGH);
}

void SEI()
{
   digitalWrite(LED_A, HIGH);
   digitalWrite(LED_C, HIGH);
   digitalWrite(LED_D, HIGH);
   digitalWrite(LED_E, HIGH);
   digitalWrite(LED_F, HIGH);
   digitalWrite(LED_G, HIGH);
}

void AZZERA()
{
   digitalWrite(LED_A, LOW);
   digitalWrite(LED_B, LOW);
   digitalWrite(LED_C, LOW);  // RESETTO TUTTI I segmenti
   digitalWrite(LED_D, LOW);
   digitalWrite(LED_E, LOW);
   digitalWrite(LED_F, LOW);
   digitalWrite(LED_G, LOW);
}

void loop()
{
  buttonState=digitalRead(buttonPin);
  if (buttonState==LOW)                     // attivo basso!
  { strobe(); AZZERA();
    ran=random(1,7);
    switch(ran)
      {
        case 1:     UNO();          break;
        case 2:     DUE();           break;
        case 3:     TRE();            break;
        case 4:     QUATTRO(); break;
        case 5:     CINQUE();    break;
        case 6:     SEI();             break;
        // case 7:     break;
       default: ;
      }
    delay (time);
  }
}
// ------------------------ Fine programma --------------------------------------------------------


Simulazione: Dado elettronico

Per utilizzare i display ad "anodo comune" si possono prevedere dei transistori invertitori di fase, in uscita, o "complementare le uscite sulle routines di definizione delle cifre, aggiungendo anche gli opportuni valori iniziali. Il corpo del programma resta lo stesso.
Invece delle routine così definite, per il pilotaggio del display si potrebbe fare uso di un array a 7 elementi.



Argomenti correlati:
Dado elettronico V2
Estrazione numeri al Lotto



> Arduino N° 22