Zufallszahlen: ein D6 auf einer LED Matrix - AZ-Delivery

Generare numeri casuali è molto semplice. C'è una funzione random () per questo.

Proviamo semplicemente con un piccolo schizzo che genera un numero e lo emette sul monitor seriale:

 

vuoto configurazione() {   serial.iniziare(9600);   serial.stampare("Numero casuale compreso tra 1 e 6:");   serial.stampare(casuale(1,7));   serial.stampare("\ n");
}
vuoto cappio() {   // inserisci qui il tuo codice principale, per eseguirlo ripetutamente:
}  

 

Carichiamo lo schizzo sul nostro nano, apriamo il monitor seriale, impostiamo 9600 baud e siamo felici:

Numero casuale compreso tra 1 e 6: 2

Non è stato così difficile? Perché il signor Neumann scrive un post sul blog a riguardo?

Se ora premi il pulsante di ripristino più volte, diventa ovvio:

Numero casuale compreso tra 1 e 6: 2
Numero casuale compreso tra 1 e 6: 2
Numero casuale compreso tra 1 e 6: 2
Numero casuale compreso tra 1 e 6: 2
Numero casuale compreso tra 1 e 6: 2

La documentazione ufficiale ovviamente afferma che dovresti inizializzare il generatore di numeri casuali usando randomSeed () e raccomanda di leggere un pin che non è collegato usando analogRead ().

È stato solo per caso che ho incontrato la biblioteca TrueRandom di sirleech. Questo fornisce una funzione TrueRandom.random(), che può essere chiamata come la funzione casuale(), ma senza ulteriore preparazione fornisce numeri casuali affidabili.

La biblioteca è disponibile presso GitHub ahttps://github.com/sirleech/TrueRandom

Quindi stiamo adattando un po 'il nostro schizzo:

 

 

#include <TrueRandom.h> // Inserisci la libreria
leer Impostazione() {   Serien.beginnen(9600);   Serien.drucken("numero casuale tra 1 e 6:");   Serien.drucken(zufällig(1,7));   Serien.drucken("\n");   Serien.drucken("Un numero casuale tra 1 e 6 con TrueRandom:");   Serien.drucken(TrueRandom.zufällig(1,7));    Serien.drucken("\n");
}
leer Schleife() {   // Legen Sie Ihren Hauptcode hier, um wiederholt zu laufen:
}

Caricamo anche questo schizzo sul nostro nano e, ecco, ora viene generato un numero diverso dopo ogni riavvio:

Numero casuale tra 1 e 6: 2
Numero casuale tra 1 e 6 con TrueRandom: 2
Numero casuale tra 1 e 6: 2
Numero casuale tra 1 e 6 con TrueRandom: 1
Numero casuale tra 1 e 6: 2
Numero casuale tra 1 e 6 con TrueRandom: 4
Numero casuale tra 1 e 6: 2
Numero casuale tra 1 e 6 con TrueRandom: 2
Numero casuale tra 1 e 6: 2
Numero casuale tra 1 e 6 con TrueRandom: 6

 

TrueRandom non ha ancora offerto di più. Pertanto, la funzione TrueRandom.memfill (adresse, länge) consente di riempire un'area di archiviazione all'indirizzo specificato con numeri casuali.

Può anche essere generato facilmente indirizzi MAC o UUID.

Ora includiamoVisualizzazione a matrice a LED 64al nostro nano, rendilo un cubo.

In primo luogo, modifichiamo il Blog-Beitrag vom 7. Juni descritto il file MD_MAX72xx_font.cpp come segue:

3, 0x42, 0x7f, 0x40, // 49 - '1'
5, 0x72, 0x49, 0x49, 0x49, 0x46, // 50 - '2'
5, 0x21, 0x41, 0x49, 0x4d, 0x33, // 51 - '3'
5, 0x18, 0x14, 0x12, 0x7f, 0x10, // 52 - '4'
5, 0x27, 0x45, 0x45, 0x45, 0x39, // 53 - '5'
5, 0x3c, 0x4a, 0x49, 0x49, 0x31, // 54 - '6'

sostituire da:

8,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0, // 49 - '1'
8,0x3,0x3,0x0,0x18,0x18,0x0,0xC0,0xC0, // 50 - '2'
8,0x3,0x3,0x0,0x18,0x18,0x0,0xC0,0xC0, // 51 - '3'
8,0xC3,0xC3,0x0,0x0,0x0,0x0.0xC3,0xC3, // 52 - '4'
8,0xC3,0xC3,0x0,0x18,0x18,0x0,0xC3,0xC3, // 53 - '5'
8,0xDB,0xDB,0x0,0x0,0x0,0x0,0xDB,0xDB, // 54 - '6'

 

E infine ci leghiamo nelle librerie MD_MAX72xx e MD_Parola e diamo il numero sulla matrice:

 

 

#include <TrueRandom.h>
#include <MD_MAX72xx.h>
#include <MD_word.h>
#include <SPI.h>

#definire  MAX_DEVICES 1
#definire CLK_PIN   13  // oder SCK
#definire DATA_PIN  11  // oder MOSI
#definire CS_PIN    10  // oder SS

// Connessione SPI hardware
MD_word P = MD_word(CS_PIN, MAX_DEVICES);
#definire  DELAYTIME  100  // in millisecondi

leer Impostazione() {   Serien.beginnen(9600);   Serien.drucken("numero casuale tra 1 e 6:");   Serien.drucken(zufällig(1,7));   Serien.drucken("\n");   Serien.drucken("Un numero casuale tra 1 e 6 con TrueRandom:");   uint8_t rnd = TrueRandom.zufällig(1,7);   Serien.drucken(rnd);    Serien.drucken("\n");   P.beginnen();   P.drucken(" ");   Verzögerung(500);   P.drucken(rnd);    }

leer Schleife() {   // Legen Sie Ihren Hauptcode hier, um wiederholt zu laufen:

}

 

Ora, un nuovo numero viene generato e visualizzato ad ogni pulsante di ripristino.

dadi

 

 

 

Für arduinoProjekte für anfänger

1 commento

Peter Nohle

Peter Nohle

Hallo. Ich habe den Sketch an 3 Nanos probiert. Bei allen leuchtet nur alle 64 LEDs der Matrix. Als blutiger Anfänger habe ich jetzt im Code nix auffälliges entdeckt. Nach dem Upload des Sketches der fehlerfrei verläuft, blinken nach einem Reset auch kurz zwei Leds
auf dem Nano. Das heißt er arbeitet das Setup ab. Nur… Die Matrix bringt keine Änderung. Alle leuchten. Die cpp hab ich angepaßt. Was mache ich falsch?

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione