Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
2.11 Joystick
Einführung
Ein Joystick ist ein Eingabegerät, das häufig in Spielen, Robotik und Navigationssystemen verwendet wird. Er verfügt typischerweise über zwei Achsen (X und Y) zur Richtungssteuerung sowie eine Taste (Btn oder SW) für zusätzliche Eingaben. In diesem Projekt lernen Sie, wie ein Joystick funktioniert, indem Sie ihn bewegen und die entsprechenden Werte der X-, Y- und Tastenzustände auf dem Bildschirm anzeigen lassen.
Benötigte Komponenten
Die folgenden Komponenten werden für dieses Projekt benötigt:
KOMPONENTE |
KAUFLINK |
|---|---|
- |
|
- |
|
Raspberry Pi |
- |
Schaltplan
Verdrahtungsdiagramm
Bauen Sie die Schaltung gemäß der folgenden Abbildung auf:
Stellen Sie sicher, dass:
Die Pins VRX und VRY des Joysticks mit ADC-Pins verbunden sind.
Der SW-Pin des Joysticks mit GPIO-Pin 17 verbunden ist.
Stromversorgung und Masse korrekt angeschlossen sind.
Beispiel ausführen
Der gesamte Beispielcode für dieses Tutorial befindet sich im Verzeichnis ai-lab-kit.
Führen Sie die folgenden Schritte aus, um das Beispiel zu starten:
cd ~/ai-lab-kit/python/
sudo python3 2.11_Joystick.py
Dieses Python-Skript liest und zeigt Joystick-Daten in Echtzeit über das Fusion HAT+ an. Nach dem Start geschieht Folgendes:
Das Skript liest kontinuierlich die X- und Y-Werte vom Fusion HAT+.
Es überwacht die Taste, die mit GPIO-Pin 17 verbunden ist, um festzustellen, ob sie gedrückt wurde.
Die Werte für X, Y und den Tastenzustand werden im Format
X: <value> Y: <value> Btn: <value>in der Konsole ausgegeben, wobei:XundYdie analogen ADC-Messwerte darstellen.Btnden Wert1hat, wenn die Taste nicht gedrückt ist, und0, wenn sie gedrückt ist.
Das Skript aktualisiert die Werte alle 0,2 Sekunden und läuft kontinuierlich, bis es mit
Ctrl+Cbeendet wird.
Code
Unten finden Sie den Python-Code, der in diesem Projekt verwendet wird:
#!/usr/bin/env python3
from fusion_hat.adc import ADC
from fusion_hat.pin import Pin, Mode, Pull
import time
# Initialize the Joystick
BtnPin = Pin(17, mode=Mode.IN, pull=Pull.UP)
xAxis = ADC('A1')
yAxis = ADC('A0')
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
# Main loop to read and print ADC values and button state
while True:
# Read X and Y values from ADC channels
x_val = MAP(xAxis.read(),0,4095,-100,100)
y_val = MAP(yAxis.read(),0,4095,-100,100)
# Read the state of the button (pressed or not)
Btn_val = BtnPin.value()
# Print the X, Y, and button values
print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
# Delay of 0.2 seconds before the next read
time.sleep(0.2)
# Gracefully handle script termination (e.g., via KeyboardInterrupt)
except KeyboardInterrupt:
pass
Den Code verstehen
Importe:
from fusion_hat.adc import ADC from fusion_hat.pin import Pin, Mode, Pull import time
Das Skript importiert die notwendigen Module:
fusion_hatfür GPIO-Funktionen sowietimezum Einfügen von Verzögerungen.Initialisierung:
# Joystick initialisieren BtnPin = Pin(17, mode=Mode.IN, pull=Pull.UP) xAxis = ADC('A1') yAxis = ADC('A0')
Das Skript initialisiert den Joystick, indem Instanzen der Klassen
PinundADCerstellt werden. Die Taste wird als Eingang mit aktiviertem internem Pull-up-Widerstand konfiguriert, während die X- und Y-Achsen so eingerichtet werden, dass sie analoge Werte von den ADC-Kanälen A0 und A1 lesen.Hauptschleife:
try: # Hauptschleife zum Lesen und Ausgeben der ADC-Werte und des Tastenzustands while True: # X- und Y-Werte von den ADC-Kanälen lesen x_val = MAP(xAxis.read(),0,4095,-100,100) y_val = MAP(yAxis.read(),0,4095,-100,100) # Zustand der Taste lesen (gedrückt oder nicht) Btn_val = BtnPin.value() # X-, Y- und Tastenzustand ausgeben print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val)) # 0,2 Sekunden warten bis zur nächsten Messung time.sleep(0.2) # Skript sauber beenden (z. B. bei KeyboardInterrupt) except KeyboardInterrupt: pass
Liest die X- und Y-Werte von den ADC-Kanälen 0 und 1.
Liest den Zustand der Taste (gedrückt oder nicht) vom SW-Pin.
Gibt die X-, Y- und Tastenzustände alle 0,2 Sekunden auf dem Bildschirm aus.
Fehlerbehebung
ADC-Werte liegen nicht im erwarteten Bereich:
Ursache: Falsche ADC-Kanal-Konfiguration oder Verdrahtungsfehler.
Lösung: Überprüfen Sie die ADC-Kanal-Konfiguration und die Verkabelung. Stellen Sie sicher, dass der Joystick mit den richtigen ADC-Kanälen verbunden ist.
Tastenzustand ist immer 0:
Ursache: Falsche Verdrahtung der Taste oder falsche Pull-up/Pull-down-Konfiguration.
Lösung: Überprüfen Sie die Verkabelung der Taste. Kontrollieren Sie die Pull-up/Pull-down-Einstellung, damit die Taste korrekt mit dem SW-Pin verbunden ist.
ADC-Werte bleiben konstant:
Ursache: Die ADC-Kanäle sind mit keiner Eingabe verbunden.
Lösung: Verbinden Sie den Joystick mit den ADC-Kanälen 0 und 1, damit variable Eingangswerte gelesen werden können.
Erweiterungsideen
Joystick-Steuerung: Verwenden Sie die X- und Y-Werte, um einen virtuellen Joystick oder ein Spielelement zu steuern.
Datenprotokollierung: Speichern Sie die X-, Y- und Tastenzustände zur Analyse in einer Datei:
with open("sensor_log.txt", "a") as log_file: log_file.write(f"X: {x_val}, Y: {y_val}, Btn: {Btn_val}\n")
Fazit
Dieses Experiment zeigt, wie ein Joystick mit dem Fusion HAT+ zur Analog-Digital-Umwandlung verbunden wird. Wenn Sie verstehen, wie Joystick-Eingaben gelesen und interpretiert werden, können Sie interaktive Systeme für Spiele, Robotik oder andere Anwendungen entwickeln.