Mikrocontroller vom Typ Arduino können keine „echten“ Zufallszahlen erzeugen. Es handelt sich um Pseudozufallszahlen (im Folgenden Zufallszahlen genannt):
Ein Algorythmus erzeugt eine endliche (große) Menge immer gleicher Zahlen. Die Kombination aus random und randomSeed bestimmt nur eine zufällige Startposition innerhalb dieser Liste.
randomSeed kann entweder das „Rauschen“ (den wechselnden Wert an einem analogen Pin) mit ⇒analogRead() oder den aktuellen Wert von ⇒millis() verwenden um die Startposition innerhalb der Liste zufällig zu bestimmen.
Info
Die erzeugten Zufallszahlen sind keine echten Zufallszahlen. Der ESP32 kann „echte“ ⇒Zufallszahlen erzeugen
Beispiel
Zufallszahlen zwischen 1 und 6 erzeugen
Die ermittelte Zufallszahl wird immer nach unten gerundet (6,99 ergibt 6), deshalb muss 7 als Maximum angegeben werden.
Die ermittelte Zufallszahl wird immer nach unten gerundet (6,99 ergibt 6), deshalb muss 7 als Maximum angegeben werden.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
int Minimum = 1; int Maximum = 7; void setup() { Serial.begin(9600); // auf serielle Verbindung warten delay(1000); // Zufallsgenerator starten randomSeed(millis()); } void loop() { // mit for-Schleife Zufallszahlen erzeugen und anzeigen Serial.println("Erstelle Zufallszahlen zwischen 1 und 6:"); for (int i = 1; i < 10; i++) { int Zahl = random(Minimum, Maximum); Serial.print("Zufallszahl: "); Serial.println(Zahl); } Serial.println("-------------------------"); // 5 Sekunden warten delay(5000); } |
Beispiel
Verteilung der Zufallszahlen 1 bis 6

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
int AnzahlEins; int AnzahlZwei; int AnzahlDrei; int AnzahlVier; int AnzahlFuenf; int AnzahlSechs; void setup() { Serial.begin(9600); delay(1000); // Zufallsgenerator starten randomSeed(A0); for (int i = 0; i < 100000; i++) { int Zahl = random(1, 7); switch (Zahl) { case 1: AnzahlEins++; break; case 2: AnzahlZwei++; break; case 3: AnzahlDrei++; break; case 4: AnzahlVier++; break; case 5: AnzahlFuenf++; break; case 6: AnzahlSechs++; break; } } Serial.println(("1 -> " + String(AnzahlEins))); Serial.println(("2 -> " + String(AnzahlZwei))); Serial.println(("3 -> " + String(AnzahlDrei))); Serial.println(("4 -> " + String(AnzahlVier))); Serial.println(("5 -> " + String(AnzahlFuenf))); Serial.println(("6 -> " + String(AnzahlSechs))); } void loop() { // bleibt leer, Programm läuft nur einmal } |
Beispiel
Zufälliges Element aus einem Array

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Elemente des Arrays String Mikrocontroller[] = {"Arduino UNO R3", "Arduino Nano", "Arduino R4 Minima", "ESP32-Wroom", "ESP32-S3", "ESP32-C3"}; // Länge des Arrays berechnen int LaengeArray = sizeof(Mikrocontroller) / sizeof(Mikrocontroller[0]); void setup() { Serial.begin(9600); delay(1000); randomSeed(millis()); } void loop() { int Index = random(0, LaengeArray); String zufaelligesElement = Mikrocontroller[Index]; Serial.print("Zufälliges Element: " + String(Index) + " "); Serial.println(zufaelligesElement); delay(2000); } |
Beispiel
Zufällige Tonfolge erzeugen
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
int TASTER = 9; int LAUTSPRECHER = 10; // Tonhöhen festlegen int Minimum = 500; int Maximum = 2000; void setup() { pinMode(TASTER, INPUT_PULLUP); } void loop() { // ZUfallsgenerator neu starten randomSeed(millis()); int TasterLesen = digitalRead(TASTER); // PULLUP gesetzt -> Auslöser bei LOW if (TasterLesen == LOW) { // zufällige Tonfolge spielen for (int i = 0; i < 10; i++) { tone(LAUTSPRECHER, random(Minimum, Maximum), 500); delay(200); } } } |
Letzte Aktualisierung: