Roulette mit dem Raspberry Pi bauen
Author D.Selzer-McKenzie
Video: https://youtu.be/9h6VQx2e1KQ
Hier zeige ich Ihnen, wie Sie mit wenig Material einen
Roulettekessel mit Raspberry Pi bauen können. Ich zeige es hier mit
12-Roulettezahlen, wenn Sie einen Kessel mit 37 Roulettezahlen bauen wollen,
können Sie das ganz einfach entsprechend erweitern.
Der Sinn des Spiels besteht darin, vorauszusagen, welches
Feld eine Kugel, die sich im Roulettekessel im Kreis dreht, in welchem
Fach zu liegen kommt. Es gibt
unterschiedliche Roulette-Varianten einer abweichenden Anzahl Fächer. Für unser
Spiel werden
Da der des Spieles
hinsichtlich der runden Anordnung der LEDs Breadboard recht mühsam ist und
nicht gerade schön aussieht, habe ich
mich für eine Frontplatte mit einer darunterliegenden Platine entschieden. Auf der Frontplatte aus
Hartschaum, z.B. für Werbetafeln oder Displays benutzt werden, kann man
wunderbar passende Löcher an beliebigen Stellen bohren und ist nicht an die
festen Rasterabstände einer Lochrasterplatin gebunden. Sie können die Platte
mit Distanzhülsen oben auf der Platine platzieren, das sieht echt gut aus.
Frontplatte für das Roulette-Spiel
Platine und Frontplatte für das Roulette-Spiel
Maße der Frontplatte für das Roulette-Spiel
Zusammengebaut sieht das Spiel und Platine so aus. Am Rand können
Sie den Wannenstecker erkennen , über den die Verbindung zum Raspberry Pi über
ein Flachkabel hergestellt wird.
Benötigte Bauteile>
12 x LEDs 5mm je 4 rote, grüne und gelbe
12 x Widerstand 330 (gelb,lila,braun)
1 x Widerstand 10K (braun,schwarz,orange)
1 x Taster
1 x 26-poliger Wannenstecker + 1 x Stiftleiste
1 x Platine ca. 8,5 x 9,5 cm
1 x Hartschaumplatte, gelb oder andere Farbe (500x250x3)
4 x Distanzhülsen 20mm
4 x Gewindeschrauben M3/30mm + 4 x Mutter
Das Roulettespiel soll so funktionieren, dass bei einem
Druck auf den Taster die einzelnen LEDs im Kreislauf nacheinander angezeigt
werden, wobei die Geschwindigkeit des Wechsels (ganz wie im echten Roulette)
nach und nach geringer wird.
Der Schaltplan:
Das Programm: Zu Beginn ist das Initialisierungsprogramm
durchzuführen.
Die Initialisierungen:
Anhand der Initialisierungswerte für Port A und Port B
können Sie sehen, dass alle Pins auf GPB7 als Ausgänge arbeiten. Der Taster zum
Starten des Roulettespiels muss sich natürlich an einem Eingang befinden, und
deswegen lautet der Initialisierungswert für Port B auch 0x80, wo das MSB auf 1
ist.
Werfen wir zunächst einen Blick auf die showLED, die die
Aufgabe =er LED-Ansteuerung innehat. Sie nimmt einen Wert zwischen 1 und 12 entgegen, der der anzusteuernden LED
entsprechen soll. Da LEDs über beide Ports verteilt sind, müssen wir sie
natürlich getrennt ansteuern. Da immer nur eine LED aufleuchten soll, verhält es
sich mit der Ansteuerung recht einfach. Wir müssen lediglich in Abhängigkeit
des übergebenen Wertes eine 1 an die betreffende LED-Position schieben, was
über den Schiebeoperator << erfolgt. Haben wir es z.B. mit einem
übergebenen Wert von 1 zu tun, muss die erste LED aufleuchten und es darf zu
keiner Schiebeoperation kommen. Aus diesem Grund wird in Zeile 21 immer 1
subtrahiert und erst danach mit dem Ergebnis die Schiebeoperation durchgeführt.
In Zeile 22 wird Port A angesteuert und B über Zeile 23.
Wie funktioniert das mit der Aussteuerung von Port B ?
Wenn der Wert, der zur Anzeige gebracht werden soll, z.B. 10
beträgt, dann ist er quasi 2 Positionen zu weit links für Port A, was bedeutet,
dass dieser Port nichts zur Anzeige bringt. Es muss aber die zweite LED von
Port B angesteuert werden. Über das Schieben um 8 Positionen nach rechts in
Zeile 23 hole ich mir für Port B die binäre 1 an die zweite Position, damit
dort die LED aufleuchtet.
Kommen wir noch zur roll-Funktion, die den die anzuzeigenden
Werte aus der main-Funktion enthält und dann die showLED-Funktion aufruft. Die
Aufrufreihenfolge ist wie folgt:
Über die for-Schleife in Zeile 28 werden 10 LED-Runden
simuliert, wobei am Ende eine LED an bleibt. Wenn der Rundenzähler grösser als
4 ist, wird über das Erhöhen der Verzögerungszeit in Zeile 29 die rotierende
(drehende) Kugel langsamer, was in Zeile 32 über die sleep-Funktion zum Tragen
kommt. Jede einzelne LED wird über die innere for-Schleife in Zeile 30
angesteuert, wobei der Aufruf der showLED-Funktion in Zeile 31 mit der Übergabe
der Laufvariablen j erfolgt. Irgendwann aber mal muss die ermittelte
Zufallszahl angezeigt werden bzw. die betreffende LED kontinuierlich leuchten.
Das geschieht im letzten
Schleifendurchlauf, wenn der Wert der KLaufvariablen i der äusseren
for-Schleife gleich 9 ist. Hat jetzt die innere Schleiufe bzw. deren
Laufvariable j, die die LEDs ansteuert, den gleichen WEert wie die generierte
Zufallszahl, wird die Funktion über die return-Anweisung verlassden. Die LED,
die gerade an war, leuchtet weiterhin. Kommen wir letztlich zur main-Funktion,
die alles ins Rollen bringt.
Innerhalb der Endlosschleife wird der Wert von Port B
abgefragt, an dem der Taster anbgeschlossen ist. Über die bitweise
ODER-Verknüpfung mit dem Ewert 0x80 wird das MSB herausgefiltert. Wenn dieser
Wert beim Drücken der Taste ungleich 0 wird, erfolgt in Zeile 42 eine
Generierung einer Zufallszahl zwiwchen 1 und 12 (oder wenn Sie verändern,
zwichen 1 und 36). Über die Zeile 43 kommt es dann zum Aufruf der roll-Funktion
mit der Übergabe eben dieser Zufallszahl, und das Spiel kann beginnen. Bei
Neustart einfach wieder den Taster drücken. Falls das Programm über
Tastenkombination Strg-C beendet wird, wird über die Zeilen 47 und 48 die noch
leuchtende LED ausgeschaltet.
Entwickeln Sie doch ein richtig grosses Roulettespiel mit
z.B. drei oder mehr MSC23017, sodass mindestens 48 Leuchtdioden zur Ansteuerung
zur Verfügung stehen. Der Taster könnte man dann über einen andere GPIO-Pin
anschliessen.
Keine Kommentare:
Kommentar veröffentlichen
Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.