.. note::
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebookへようこそ!Raspberry Pi、Arduino、ESP32を愛好する仲間たちと一緒に、これらの技術を深く探求しましょう。
**参加する理由**
- **専門家のサポート**: コミュニティやチームの助けを借りて、購入後の問題や技術的な課題を解決します。
- **学びと共有**: スキルを向上させるためのヒントやチュートリアルを交換します。
- **独占プレビュー**: 新製品の発表やプレビューに早期アクセスできます。
- **特別割引**: 最新の製品に対する独占割引を楽しめます。
- **フェスティブプロモーションとギブアウェイ**: ギブアウェイやフェスティブプロモーションに参加できます。
👉 私たちと一緒に探索と創造を始める準備はできましたか?[|link_sf_facebook|]をクリックして、今日参加しましょう!
2.1.6 ジョイスティック
=======================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
お使いのキットの種類によって、 **ADC0834** か **MCP3008** のどちらかをご確認のうえ、それぞれの説明に進んでください。
イントロダクション
-------------------
このプロジェクトでは、ジョイスティックの動作を学びます。ジョイスティックを操作し、その結果を画面に表示します。
コンポーネント
---------------
.. image:: ../img/image317.png
回路図
-------------------
ジョイスティックのデータを読み取る際、軸によっていくつかの違いがあります。X軸とY軸のデータはアナログであり、ADC0834を使用してアナログ値をデジタル値に変換する必要があります。Z軸のデータはデジタルなので、GPIOを直接使用して読み取ることができますが、ADCを使用して読み取ることもできます。
.. image:: ../img/image319.png
.. image:: ../img/image320.png
実験手順
-----------------------
**ステップ1:** 回路を構築します。
.. image:: ../img/image193.png
**ステップ2:** コードのフォルダに移動します。
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/nodejs/
**ステップ3:** コードを実行します。
.. raw:: html
.. code-block::
sudo node joystick.js
コードが実行されたら、ジョイスティックを動かして、対応するx、y、Btnの値が画面に表示されることを確認します。
**コード**
.. 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-block:: js
const ADC0834 = require('./adc0834.js').ADC0834;
adc0834モジュールを使用するために ``ADC0834`` コンストラクタをインポートします。
.. 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);
ADC0834の複数のチャネルの値を同時に読み取る場合、非同期プログラミングが必要です。
ここではpromise関数を作成し、
async関数のawait命令を使用して、この複雑な非同期タスクをエレガントに記述します。
* `Promise `_
* `Async Function `_
現象の写真
------------------
.. image:: ../img/image194.jpeg