.. note::
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
- **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!
.. _2.1.9_py_pi5:
2.1.9 Joystick
=====================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie **ADC0834** oder **MCP3008** haben, und fahren Sie mit dem entsprechenden Abschnitt fort.
Einleitung
----------------------
In diesem Projekt lernen wir, wie ein Joystick funktioniert. Wir bedienen den Joystick und zeigen die Ergebnisse auf dem Bildschirm an.
Benötigte Komponenten
-----------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../python_pi5/img/2.1.9_joystick_list.png
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- IN DIESEM KIT ENTHALTENE TEILE
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können sie auch separat über die unten stehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENVORSTELLUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_joystick`
- \-
* - :ref:`cpn_adc0834`
- \-
Schaltplan
--------------
Wenn die Daten des Joysticks gelesen werden, gibt es Unterschiede zwischen den Achsen: Die Daten der X- und Y-Achse sind analog, was bedeutet, dass der ADC0834 verwendet wird, um den analogen Wert in einen digitalen Wert umzuwandeln. Die Daten der Z-Achse sind digital, sodass Sie direkt den GPIO zum Lesen verwenden können, oder Sie können auch den ADC zum Lesen verwenden.
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_1.png
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_2.png
Experimentelle Verfahren
------------------------------
**Schritt 1:** Bauen Sie den Schaltkreis auf.
.. image:: ../python_pi5/img/2.1.9_Joystick_circuit.png
**Schritt 2:** Wechseln Sie zum Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Schritt 3:** Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo python3 2.1.9_Joystick_zero.py
Nachdem der Code ausgeführt wurde, drehen Sie den Joystick, dann werden die entsprechenden Werte von x, y, Btn auf dem Bildschirm angezeigt.
.. warning::
Wenn die Fehlermeldung ``RuntimeError: Cannot determine SOC peripheral base address`` angezeigt wird, lesen Sie bitte :ref:`faq_soc`
**Code**
.. note::
Sie können den unten stehenden Code **modifizieren/zurücksetzen/kopieren/ausführen/stoppen**. Aber zuvor müssen Sie zum Quellcodepfad wie ``raphael-kit/python-pi5`` gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Button
import ADC0834
import time
# Initialize the button connected to GPIO pin 22
BtnPin = Button(22)
# Setup the ADC0834 ADC
ADC0834.setup()
try:
# Main loop to read and print ADC values and button state
while True:
# Read X and Y values from ADC channels 0 and 1
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# 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
**Code-Erklärung**
#. Importiert die Klasse ``Button`` aus der Bibliothek ``gpiozero`` zur Verwaltung eines Buttons, der mit einem GPIO-Pin verbunden ist. Importiert ebenfalls die Bibliothek ``ADC0834`` für die Schnittstelle mit dem ADC0834 ADC (Analog-Digital-Wandler) Modul.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Button
import ADC0834
import time
#. Initialisiert einen Button, der mit dem GPIO-Pin 22 verbunden ist, und richtet das ADC0834-Modul für die Nutzung ein.
.. code-block:: python
# Initialize the button connected to GPIO pin 22
BtnPin = Button(22)
# Setup the ADC0834 ADC
ADC0834.setup()
#. Die VRX- und VRY-Verbindungen des Joysticks sind mit CH0 und CH1 des ADC0834 verbunden. Dies ermöglicht das Lesen der Werte von CH0 und CH1, die dann in den Variablen ``x_val`` und ``y_val`` gespeichert werden. Zusätzlich wird der SW-Wert des Joysticks gelesen und der Variablen ``Btn_val`` zugewiesen. Die abgerufenen Werte von ``x_val``, ``y_val`` und ``Btn_val`` werden anschließend mit der Funktion ``print()`` angezeigt.
.. code-block:: python
try:
# Main loop to read and print ADC values and button state
while True:
# Read X and Y values from ADC channels 0 and 1
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# 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