.. 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_js:
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.
Einführung
----------
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 folgende Komponenten.
.. image:: ../img/image317.png
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ARTIKEL IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können sie auch einzeln über die untenstehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENBESCHREIBUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_joystick`
- \-
* - :ref:`cpn_adc0834`
- \-
Schaltplan
----------
Beim Auslesen der Joystick-Daten gibt es Unterschiede zwischen
den Achsen: Die Daten der X- und Y-Achse sind analog und müssen mit dem ADC0834
in einen digitalen Wert umgewandelt werden. Die Daten der Z-Achse sind digital, sodass
sie direkt über GPIO gelesen werden können, oder auch mit ADC.
.. image:: ../img/image319.png
.. image:: ../img/image320.png
Experimentelle Verfahren
-----------------------------
**Schritt 1:** Bauen Sie den Schaltkreis.
.. image:: ../img/image193.png
**Schritt 2:** Wechseln Sie in den Ordner mit dem Code.
.. raw:: html
.. code-block::
cd ~/raphael-kit/nodejs/
**Schritt 3:** Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo node joystick.js
Nachdem der Code ausgeführt wurde, drehen Sie den Joystick. Die entsprechenden Werte von
x, y und Btn werden auf dem Bildschirm angezeigt.
**Code**
.. code-block:: js
const Gpio = require('pigpio').Gpio;
const ADC0834 = require('./adc0834.js').ADC0834;
const adc = new ADC0834(17, 18, 22);
const btn = new Gpio(25, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_UP,
});
setInterval(async() => {
x_val = await adc.read(0);
y_val = await adc.read(1);
btn_val = btn.digitalRead();
console.log(`x = ${x_val}, y = ${y_val}, btn = ${btn_val}\n`);
}, 100);
**Code-Erklärung**
.. code-block:: js
const ADC0834 = require('./adc0834.js').ADC0834;
Wir importieren einen ``ADC0834`` Konstruktor, um das adc0834 Modul zu nutzen.
.. code-block:: js
setInterval(async() => {
x_val = await adc.read(0);
y_val = await adc.read(1);
btn_val = btn.digitalRead();
console.log(`x = ${x_val}, y = ${y_val}, btn = ${btn_val}\n`);
}, 100);
Beim gleichzeitigen Auslesen der Werte von mehreren Kanälen des ADC0834 ist asynchrone Programmierung erforderlich.
Wir erstellen hier eine Promise-Funktion und verwenden die await-Anweisung der asynchronen Funktion, um diese komplexe asynchrone Aufgabe elegant zu schreiben.
* `Promise `_
* `Async Function `_
Phänomen-Bild
---------------
.. image:: ../img/image194.jpeg