Willekeurige getallen: een D6 op een LED-matrix

Het genereren van willekeurige getallen is eenvoudig. Hiervoor is er de functie random().

Laten we het proberen met een kleine schets die een getal genereert en het op de seriële monitor uitvoert:

 

Void Setup() {   Seriële.Beginnen(9600);   Seriële.Afdrukken("Willekeurig getal tussen 1 en 6: ");   Seriële.Afdrukken(Willekeurige(1,7));   Seriële.Afdrukken("Een");
}
Void Lus() {   zet uw hoofdcode hier, om herhaaldelijk uit te voeren:
}  

 

We laden de Sketch op onze Nano, openen de seriële monitor, stellen 9600 Baud in en zijn blij:

Willekeurig getal tussen 1 en 6: 2

Was het niet zo moeilijk? Waarom schrijft Mr Neumann hierover een blogpost?

Als u een paar keer op de resetknop drukt, wordt het duidelijk:

Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6: 2

In de officiële documentatie staat natuurlijk dat men de random number generator moet initialiseren door middel van randomSeed() en adviseert om een pin uit te lezen door analogRead() die niet is aangesloten.

Het was maar bij toeval dat ik sirleech's TrueRandom bibliotheek tegenkwam. Dit biedt een TrueRandom.random(functie) die kan worden genoemd als de random() functie, maar biedt betrouwbare willekeurige getallen zonder verdere voorbereiding.

De bibliotheek is beschikbaar op GitHub op https://github.com/sirleech/TrueRandom

Dus we passen onze schets een beetje aan:

 

 

#include <TrueRandom TrueRandom TrueRandom.H> / De bibliotheek opnemen
Void Setup() {   Seriële.Beginnen(9600);   Seriële.Afdrukken("Willekeurig getal tussen 1 en 6: ");   Seriële.Afdrukken(Willekeurige(1,7));   Seriële.Afdrukken("Een");   Seriële.Afdrukken("Willekeurig getal tussen 1 en 6 met TrueRandom: ");   Seriële.Afdrukken(TrueRandom TrueRandom TrueRandom.Willekeurige(1,7));    Seriële.Afdrukken("Een");
}
Void Lus() {   zet uw hoofdcode hier, om herhaaldelijk uit te voeren:
}

Ook deze schets laden we op onze nano, en zie, een ander aantal wordt nu gegenereerd na elke reboot:

Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6 met TrueRandom: 2
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6 met TrueRandom: 1
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6 met TrueRandom: 4
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6 met TrueRandom: 2
Willekeurig getal tussen 1 en 6: 2
Willekeurig getal tussen 1 en 6 met TrueRandom: 6

 

TrueRandom heeft meer te bieden. Met de functie TrueRandom.memfill(adres, lengte) kan dus een geheugengebied op het opgegeven adres worden gevuld met willekeurige getallen.

Het is ook gemakkelijk om MAC-adressen of UUID's te genereren.

We hebben nu 64-man LED Matrix Displayop onze nano, verander het in een kubus.

Allereerst wijzigen we de 7 juni blogpost MD_MAX72xx_font.cpp als volgt:

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'

vervangen door:

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'  

 

En tot slot, we nemen de MD_MAX72xx en MD_Parola bibliotheken, en de output van het nummer op de matrix:

 

 

#include <TrueRandom TrueRandom TrueRandom.H>
#include <MD_MAX72xx.H>
#include <MD_Parola.H>
#include <Spi.H>

#define  MAX_DEVICES 1
#define CLK_PIN   13  // of SCK
#define DATA_PIN  11  // of MOSI
#define CS_PIN    10  // of SS

// Hardware SPI-verbinding
MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);
#define  VERTRAGING  100  // in milliseconden

nietig instellen() {   Serie.beginnen(9600);   Serie.afdrukken("Willekeurig nummer tussen 1 en 6:");   Serie.afdrukken(willekeurig(1,7));   Serie.afdrukken("\ n");   Serie.afdrukken("Willekeurig nummer tussen 1 en 6 met TrueRandom:");   uint8_t rnd = TrueRandom.willekeurig(1,7);   Serie.afdrukken(rnd);    Serie.afdrukken("\ n");   P.beginnen();   P.afdrukken(" ");   vertraging(500);   P.afdrukken(rnd);    }

nietig lus() {   // plaats hier uw hoofdcode om herhaaldelijk uit te voeren:

}

 

Er wordt nu een nieuw nummer gegenereerd en weergegeven voor elke herstart (druk op de resetknop).

Kubus

 

 

 

Für arduinoProjekte für anfänger

1 Kommentar

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?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert