Educational Coding & Robotics › Foren › Weekly Challenge › Weekly Challenge – Woche 2
Schlagwörter: Elektonik und Coding, Pi Pico, Reaktionsspiel
- Dieses Thema hat 4 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 1 Jahr von
Fabian.
-
AutorBeiträge
-
28. Februar 2022 um 14:59 Uhr #8194
Fabian
VerwalterWir möchten den Aufbau mit dem Raspberry Pi Pico von der Weekly Challenge von Woche 1 erweitern und ein Reaktionsspiel für zwei Spieler bauen. So könnt ihr gegen eure Eltern, Geschwister und Freunde antreten und beweisen wer die schnellsten Nerven hat.
Wir benötigen nun zwei Knöpfe. Auf der Kommandozeile soll nun angezeigt werden, wer der beiden Spieler sein Knopf nach dem Ausgehen der LED am schnellsten gedrückt hat.
Du brauchst:
PC oder MAC mit Thonny Programmierumgebung
Aus unserer Maker-Box: Pi-Pico auf Breadboard und USB Kabel
LED, 330 Ohm Widerstand, ein oder zwei Taster und Jumper Kabel2. März 2022 um 22:50 Uhr #8208Fabian
VerwalterTipp 1
Erst bauen wir die Schaltung. Wir brauchen wieder eine LED mit einem Vorwiderstand in Serie (hintereinander). Zum Beispiel zwischen GP 15 (Pin 20) und Minuspol (Pin 38). Achtet wieder darauf, dass die Anode der LED (das lange Bein) am GP 15 verbunden ist.
Die zwei Taster, einen für jeden Spieler, bauen wir zwischen jeweils GP 16 (Pin 21) und GP 17 (Pin 22) und dem Pluspol (Pin 36).
Hier das Schaltbild des Pi Picos zur Hilfe.
3. März 2022 um 21:09 Uhr #8210Fabian
VerwalterTipp 2
Welche Änderungen müsst ihr in eurem Programm von Woche 1 hinzufügen? Hier ein paar Stichpunkte:
- Ihr müsst ein zweiten Pin als Eingangs-Pin definieren:
knopfA = machine.Pin(16, machine.PIN.IN,...)
- Die Handler-Funktion
def button_handler(pin)
bleibt, muss aber abgeändert werden. Ihr braucht aber keine zweite Funktion. Diese Handler-Funktion wird sowohl beim Drücken vom Knopf an Pin 16 wie beim Drücken vom Knopf an Pin 17 aufgerufen. In der Variablepin
ist der Knopf gespeichert der gedrückt wurde:knopfA
oderknopfB
. - Ihr braucht zwei Triggers im Hauptprogramm:
knopfA.irq(trigger=machine...)
undknopfB.irq(trigger=machine...)
- Danach braucht ihr eine Schleife, die fortlaufend überprüft ob eines der Knöpfe gedrückt wurde und welches es war. Dann soll eine Nachricht in der Kommandozeile erscheinen.
5. März 2022 um 11:52 Uhr #8211Fabian
VerwalterTipp 3
Hier ist der Anfang vom Programm mit der Handler-Funktion:
import machine import utime import urandom led = machine.Pin(15, machine.Pin.OUT) knopfA = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN) knopfB = machine.Pin(17, machine.Pin.IN, machine.Pin.PULL_DOWN) pressed = False ersterGedrueckt = None def button_handler(pin): global pressed if not pressed: pressed=True global ersterGedrueckt ersterGedrueckt = pin while True: ....
Wie geht’s weiter?
7. März 2022 um 22:07 Uhr #8228Fabian
VerwalterAuflösung
Und hier ist der gesamte Code für das Reaktionsspiel für zwei Spieler:
import machine import utime import urandom led = machine.Pin(15, machine.Pin.OUT) knopfA = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN) knopfB = machine.Pin(17, machine.Pin.IN, machine.Pin.PULL_DOWN) pressed = False ersterGedrueckt = None def button_handler(pin): global pressed if not pressed: pressed=True global ersterGedrueckt ersterGedrueckt = pin while True: print("Los...") led.value(1) utime.sleep(urandom.uniform(5, 10)) led.value(0) knopfA.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler) knopfB.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler) # Warten bis erster gedrückt while ersterGedrueckt is None: utime.sleep(1) print("Gedrückt") # Wer war der erste? if ersterGedrueckt is knopfA: print("Spieler A gewinnt!") elif ersterGedrueckt is knopfB: print("Spieler B gewinnt!") # Spiel für nächste Runde vorbereiten fastest_button = None pressed = False
Ihr könnt natürlich das Spiel für weitere Spieler erweitern. Ihr braucht einfach ein paar mehr Knöpfe, ein paar mehr Pin Definitionen und ein paar mehr Triggers.
Viel Spaß!
- Ihr müsst ein zweiten Pin als Eingangs-Pin definieren:
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.