.. note::
¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con 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 nuevos anuncios de productos y adelantos.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones festivas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo!
.. _2.1.9_py_pi5:
2.1.9 Joystick
==================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Dependiendo de la versión de su kit, identifique si tiene **ADC0834** o **MCP3008** y continúe con la sección correspondiente.
Introducción
----------------
En este proyecto, vamos a aprender cómo funciona el joystick. Manipularemos el
joystick y mostraremos los resultados en la pantalla.
Componentes Necesarios
--------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../python_pi5/img/2.1.9_joystick_list.png
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ARTÍCULOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los siguientes enlaces.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DEL COMPONENTE
- ENLACE DE COMPRA
* - :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`
- \-
Diagrama Esquemático
--------------------------
Al leer los datos del joystick, hay algunas diferencias entre los ejes: los datos
de los ejes X y Y son analógicos, por lo que se necesita usar el ADC0834 para convertir
el valor analógico a digital. Los datos del eje Z son digitales, por lo que puedes usar
directamente el GPIO para leer, o también puedes usar el ADC para leer.
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_1.png
.. image:: ../python_pi5/img/2.1.9_joystick_schematic_2.png
Procedimientos Experimentales
----------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../python_pi5/img/2.1.9_Joystick_circuit.png
**Paso 2:** Ve a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
sudo python3 2.1.9_Joystick_zero.py
Después de ejecutar el código, gira el joystick y los valores correspondientes
de x, y y Btn se mostrarán en la pantalla.
.. warning::
Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc`
**Código**
.. note::
Puedes **Modificar/Reiniciar/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/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
ADC0834.setup()
try:
# Bucle principal para leer e imprimir valores del ADC y el estado del botón
while True:
# Leer valores X e Y de los canales 0 y 1 del ADC
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# Leer el estado del botón (presionado o no)
Btn_val = BtnPin.value
# Imprimir los valores de X, Y y el botón
print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
# Esperar 0.2 segundos antes de la siguiente lectura
time.sleep(0.2)
# Manejar la terminación del script de manera elegante (por ejemplo, con KeyboardInterrupt)
except KeyboardInterrupt:
pass
**Explicación del Código**
#. Esta sección importa la clase Button de la biblioteca ``gpiozero`` para manejar un botón conectado a un pin GPIO. También importa la biblioteca ``ADC0834`` para la interfaz con el módulo ADC (Convertidor Analógico a Digital) ADC0834.
.. 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
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 SW del joystick y se asigna a la variable ``Btn_val``. Los valores obtenidos de ``x_val``, ``y_val`` y ``Btn_val`` se muestran posteriormente utilizando la función ``print()``.
.. code-block:: python
try:
# Bucle principal para leer e imprimir valores del ADC y el estado del botón
while True:
# Leer valores X e Y de los canales 0 y 1 del ADC
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
# Leer el estado del botón (presionado o no)
Btn_val = BtnPin.value
# Imprimir los valores de X, Y y el botón
print('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
# Esperar 0.2 segundos antes de la siguiente lectura
time.sleep(0.2)
# Manejar la terminación del script de manera elegante (por ejemplo, con KeyboardInterrupt)
except KeyboardInterrupt:
pass