Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche tiefer in Raspberry Pi, Arduino und ESP32 ein, zusammen mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Löse nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalte frühzeitigen Zugang zu neuen Produktankündigungen und Vorschauen.
Spezielle Rabatte: Genieße exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Verlosungen: Nimm an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu experimentieren und zu kreieren? Klicke auf [hier] und tritt noch heute bei!
14. Zufällige Farben
Manchmal braucht das Leben eine Prise Überraschung. Wenn du unentschlossen bist, lass das Zufallsprinzip die Führung übernehmen. Diese Lektion zeigt dir, wie du eine RGB-LED in zufälligen Farben aufleuchten lassen kannst – perfekt, wenn du deinen Projekten eine unvorhersehbare Note verleihen möchtest.
Aufbau der Schaltung
Benötigte Komponenten
1 * Arduino Uno R3 |
1 * RGB-LED |
3 * 220Ω Widerstand |
Jumper-Kabel |
|
|
|
|
1 * USB-Kabel |
1 * Steckbrett |
||
|
|
Diese Lektion verwendet denselben Schaltungsaufbau wie in Lektion 12.
Erstellung des Codes
In den vorherigen Lektionen hast du die RGB-LED dazu gebracht, gewünschte Farben anzuzeigen. Doch manchmal möchtest du vielleicht keine spezifische Farbe, sondern eine zufällige Farbe, ähnlich wie Bühnenlichter. Wie kann das umgesetzt werden?
Kennst du die random()-Funktionen?
In der physischen Welt gibt es überall Zufälligkeiten, aber in der Programmierung werden sogenannte „zufällige“ Zahlen meist durch einen deterministischen Algorithmus berechnet. Dieser Algorithmus benötigt in der Regel einen Startpunkt, der als „Seed“ bezeichnet wird, wodurch diese Zahlen vorhersagbar werden und somit „Pseudorandom“ genannt werden. Das „Pseudo“ deutet darauf hin, dass diese Zahlen zufällig erscheinen, jedoch einem Muster folgen.
Interessanterweise können wir auf einem Arduino Uno R3 physikalische Messungen aus der realen Welt als Seed verwenden. Wenn du mit einem Multimeter misst, bemerkst du möglicherweise leichte Schwankungen in den Spannungs- und Stromwerten des Schaltkreises. Diese Schwankungen können unseren Zufallszahlen eine gewisse Unvorhersehbarkeit verleihen.
Arduinos Ansatz für Zufälligkeiten beinhaltet mehrere Funktionen:
randomSeed();: Initialisiert den Startwert des Zufallszahlengenerators. Diese Funktion sorgt dafür, dass der Startpunkt der Zufallszahlenfolge bei jedem Programmlauf unterschiedlich ist und so verschiedene Zahlenfolgen erzeugt werden.- Parameter
seed: Ein Wert, der zum Initialisieren des Zufallszahlengenerators verwendet wird. Dieser Wert vom Typ unsigned long bestimmt den Startpunkt der Zufallsfolge.
- Rückgabewert
Keiner.
long random(long max);: Erzeugt eine Zufallszahl innerhalb eines bestimmten Bereichs.- Parameter
max: Die Obergrenze der Zufallszahl (maxselbst ist nicht inbegriffen), d.h. die Zufallszahl liegt zwischen 0 (einschließlich) undmax-1(einschließlich).- Rückgabewert
Eine Zahl vom Typ long zwischen 0 und max-1.
long random(long min, long max);: Erzeugt eine Zufallszahl innerhalb eines bestimmten Bereichs.- Parameter
min: Die Untergrenze der Zufallszahl (einschließlich).max: Die Obergrenze der Zufallszahl (maxselbst ist nicht inbegriffen), d.h. die Zufallszahl liegt zwischen min (einschließlich) und max-1 (einschließlich).- Rückgabewert
Eine Zahl vom Typ long zwischen min und max-1.
Den Code schreiben
Öffne den Sketch, den du zuvor gespeichert hast,
Lesson13_PWM_Color_Mixing.Wähle „Speichern unter…“ im „Datei“-Menü und benenne den Sketch um in
Lesson14_Random_Colors. Klicke auf „Speichern“.Rufe
randomSeed()nur einmal invoid setup()auf, um den Seed zu initialisieren. Verwende keinen festen Seed-Wert, da dies dazu führen würde, dass bei jedem Programmlauf dieselbe Zahlenfolge erzeugt wird.Wir verwenden
analogRead(A0), um den Wert eines nicht angeschlossenen analogen Pins zu lesen. Da dieser Pin nicht verbunden ist, empfängt er Rauschen, das bei jeder Messung variiert und somit einen guten Seed fürrandomSeed()liefert.
void setup() {
// Einmaliger Setup-Code:
pinMode(9, OUTPUT); // Blauen Pin der RGB-LED als Ausgang festlegen
pinMode(10, OUTPUT); // Grünen Pin der RGB-LED als Ausgang festlegen
pinMode(11, OUTPUT); // Roten Pin der RGB-LED als Ausgang festlegen
// Initialisierung des Zufalls-Seeds basierend auf einem nicht verbundenen analogen Pin
// Dies sorgt für unterschiedliche Zufallszahlenfolgen bei jedem Reset
randomSeed(analogRead(A0));
}
Entferne nun im
void loop()den ursprünglichen Code. Verwende die Funktionrandom(), um zufällige Werte zu generieren, die in den VariablenredValue,greenValueundblueValuegespeichert werden.
void loop(){
// Zufällige Werte für jede Farbkomponente generieren
int redValue = random(0, 256); // Zufälliger Wert zwischen 0 und 255
int greenValue = random(0, 256); // Zufälliger Wert zwischen 0 und 255
int blueValue = random(0, 256); // Zufälliger Wert zwischen 0 und 255
}
Gib die generierten RGB-Werte in die Funktion
setColor()ein, um die RGB-LED zum Leuchten zu bringen. Verwende auch die Funktiondelay(), um festzulegen, wie lange die Farbe angezeigt wird.
void loop() {
// Zufällige Werte für jede Farbkomponente zwischen 0 und 255 generieren
int redValue = random(0, 256); // Zufälligen Rotwert generieren
int greenValue = random(0, 256); // Zufälligen Grünwert generieren
int blueValue = random(0, 256); // Zufälligen Blauwert generieren
// Die zufälligen Farbwerte auf die RGB-LED anwenden
setColor(redValue, greenValue, blueValue);
delay(1000); // 1 Sekunde warten
}
Dein vollständiger Code ist nun bereit. Du kannst ihn auf das Arduino Uno R3 hochladen, und die RGB-LED zeigt jede Sekunde eine zufällige Farbe an.
void setup() {
// Setup-Code, der einmal ausgeführt wird:
pinMode(9, OUTPUT); // Blauen Pin der RGB-LED als Ausgang festlegen
pinMode(10, OUTPUT); // Grünen Pin der RGB-LED als Ausgang festlegen
pinMode(11, OUTPUT); // Roten Pin der RGB-LED als Ausgang festlegen
// Initialisierung des Zufalls-Seeds basierend auf einem nicht verbundenen analogen Pin
// Dies sorgt für unterschiedliche Zufallszahlenfolgen bei jedem Reset
randomSeed(analogRead(A0));
}
void loop() {
// Zufällige Werte für jede Farbkomponente zwischen 0 und 255 generieren
int redValue = random(0, 256); // Zufälligen Rotwert generieren
int greenValue = random(0, 256); // Zufälligen Grünwert generieren
int blueValue = random(0, 256); // Zufälligen Blauwert generieren
// Die zufälligen Farbwerte auf die RGB-LED anwenden
setColor(redValue, greenValue, blueValue);
delay(1000); // 1 Sekunde warten
}
// Funktion, um die Farbe der RGB-LED festzulegen
void setColor(int red, int green, int blue) {
// PWM-Wert für Rot, Grün und Blau auf die RGB-LED schreiben
analogWrite(11, red);
analogWrite(10, green);
analogWrite(9, blue);
}
Vergiss nicht, deinen Code zu speichern und deinen Arbeitsplatz aufzuräumen.
Frage
Wenn du den Code von
randomSeed(analogRead(A0))aufrandomSeed(0)änderst, wie werden sich die Farben der RGB-LED ändern und warum?In welchen Situationen wird Zufälligkeit im Alltag zur Problemlösung eingesetzt, abgesehen von der zufälligen Auswahl von Farben zur Dekoration und dem Ziehen von Lotteriezahlen?
Zusammenfassung
Am Ende dieser Lektion wirst du nicht nur gelernt haben, wie Zufälligkeit in der Programmierung funktioniert und wie du sie manipulieren kannst, um lebendige, unerwartete visuelle Effekte zu erzeugen, sondern auch die einfache Schönheit der Zufälligkeit im Alltag schätzen gelernt haben. Programmierung kann so unvorhersehbar sein wie das Leben selbst, und mit den richtigen Werkzeugen kannst du diese Unvorhersehbarkeit auf kreative und funktionale Weise nutzen.





