.. note::
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
**¿Por qué unirse?**
- **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Avances Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
- **Descuentos Especiales**: Aprovecha descuentos exclusivos en nuestros productos más recientes.
- **Promociones Festivas y Sorteos**: Participa en sorteos y promociones especiales.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo.
.. _py_pi5_joystick:
2.1.6 Joystick
==============
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Dependiendo de la versión de tu kit, identifica si tienes **ADC0834** o **MCP3008** y procede con la sección correspondiente.
Introducción
---------------
En este proyecto, aprenderemos cómo funciona el joystick. Manipularemos
el joystick y mostraremos los resultados en pantalla.
Componentes Necesarios
------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../python_pi5/img/2.1.9_joystick_list.png
.. It's definitely convenient to buy a whole kit, here's the link:
.. .. list-table::
.. :widths: 20 20 20
.. :header-rows: 1
.. * - Name
.. - ITEMS IN THIS KIT
.. - LINK
.. * - Raphael Kit
.. - 337
.. - |link_Raphael_kit|
.. You can also buy them separately from the links below.
.. .. list-table::
.. :widths: 30 20
.. :header-rows: 1
.. * - COMPONENT INTRODUCTION
.. - PURCHASE LINK
.. * - :ref:`gpio_extension_board`
.. - |link_gpio_board_buy|
.. * - :ref:`breadboard`
.. - |link_breadboard_buy|
.. * - :ref:`wires`
.. - |link_wires_buy|
.. * - :ref:`resistor`
.. - |link_resistor_buy|
.. * - :ref:`joystick`
.. - \-
.. * - :ref:`adc0834`
.. - \-
Diagrama Esquemático
------------------------
Al leer los datos del joystick, existen algunas diferencias entre los ejes:
los datos de los ejes X e Y son analógicos y necesitan utilizar el ADC0834
para convertir el valor analógico en digital. Los datos del eje Z son digitales,
por lo que puedes leerlos directamente con el GPIO o también mediante el ADC.
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_1.png
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_2.png
Procedimientos del Experimento
----------------------------------
**Paso 1:** Monta el circuito.
.. image:: ../python_pi5/img/2.1.9_Joystick_circuit.png
**Paso 2:** Abre la carpeta del código.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**Paso 3:** Ejecuta el código.
.. raw:: html
.. code-block::
sudo python3 2.1.6_Joystick.py
Después de ejecutar el código, mueve el joystick y se mostrarán en pantalla los valores correspondientes de x, y y Btn.
.. warning::
Si aparece el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc`
**Código**
.. note::
Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Antes de eso, asegúrate de estar en la ruta del código fuente, como ``davinci-kit-for-raspberry-pi/python-pi5``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Button
import ADC0834
import time
# Inicializa el botón conectado al pin GPIO 22
BtnPin = Button(22)
# Configura el ADC0834 ADC
ADC0834.setup()
try:
# Bucle principal para leer e imprimir los valores del ADC y el estado del botón
while True:
# Lee los valores de X y Y de los canales ADC 0 y 1
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# Lee el estado del botón (presionado o no)
Btn_val = BtnPin.value
# Imprime los valores de X, Y y del botón
print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
# Retraso de 0.2 segundos antes de la próxima lectura
time.sleep(0.2)
# Manejo adecuado de la finalización del script (ej., mediante KeyboardInterrupt)
except KeyboardInterrupt:
pass
**Explicación del Código**
#. En esta sección se importa la clase Button de la biblioteca ``gpiozero`` para gestionar un botón conectado a un pin GPIO. También se importa la biblioteca ``ADC0834`` para la interfaz con el módulo ADC0834 (Convertidor Analógico a Digital).
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Button
import ADC0834
import time
#. Inicializa un botón conectado al pin GPIO 22 y configura el módulo ADC0834 para su uso.
.. code-block:: python
# Inicializa el botón conectado al pin GPIO 22
BtnPin = Button(22)
# Configura el ADC0834 ADC
ADC0834.setup()
#. Las conexiones VRX y VRY del joystick están vinculadas a CH0 y CH1 del ADC0834, respectivamente. Esta configuración facilita la lectura de los valores de CH0 y CH1, que luego se guardan en las variables ``x_val`` y ``y_val``. Además, se lee el valor de SW del joystick y se asigna a la variable ``Btn_val``. Los valores obtenidos de ``x_val``, ``y_val`` y ``Btn_val`` se muestran en pantalla mediante la función ``print()``.
.. code-block:: python
try:
# Bucle principal para leer e imprimir los valores del ADC y el estado del botón
while True:
# Lee los valores de X y Y de los canales ADC 0 y 1
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# Lee el estado del botón (presionado o no)
Btn_val = BtnPin.value
# Imprime los valores de X, Y y del botón
print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
# Retraso de 0.2 segundos antes de la próxima lectura
time.sleep(0.2)
# Manejo adecuado de la finalización del script (ej., mediante KeyboardInterrupt)
except KeyboardInterrupt:
pass