.. note::
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie nach dem Kauf auftretende Probleme 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 Vorschauen.
- **Spezielle Rabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und festlichen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicken Sie auf [|link_sf_facebook|] und treten Sie noch heute bei!
2.1.6 Joystick
==============
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Je nach deiner Kit-Version überprüfe bitte, ob du **ADC0834** oder **MCP3008** hast, und fahre mit dem entsprechenden Abschnitt fort.
Einführung
------------
In diesem Projekt werden wir lernen, wie ein Joystick funktioniert. Wir bedienen den Joystick und zeigen die Ergebnisse auf dem Bildschirm an.
Komponenten
-----------------------
.. image:: ../img/image317.png
Schaltplan
-----------------
Beim Lesen der Daten des Joysticks gibt es einige Unterschiede zwischen den Achsen: Die Daten der X- und Y-Achse sind analog und müssen mit dem ADC0834 in digitale Werte umgewandelt werden. Die Daten der Z-Achse sind digital, sodass Sie diese direkt über den GPIO lesen können oder ebenfalls den ADC verwenden können.
.. image:: ../img/image319.png
.. image:: ../img/image320.png
Experimentelle Vorgehensweise
-------------------------------------
**Schritt 1:** Bauen Sie die Schaltung auf.
.. image:: ../img/image193.png
**Schritt 2:** Gehen Sie zum Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/nodejs/
**Schritt 3:** Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo node joystick.js
Nach dem Ausführen des Codes, bewegen Sie den Joystick, und die entsprechenden Werte von x, y, 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 verwenden.
.. 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 Lesen der Werte mehrerer Kanäle des ADC0834 ist asynchrones Programmieren erforderlich. Wir erstellen hier eine Promise-Funktion und verwenden die await-Anweisung der async-Funktion, um diese komplexe asynchrone Aufgabe elegant zu schreiben.
* `Promise `_
* `Async Function `_
Phänomenbild
------------------
.. image:: ../img/image194.jpeg