.. note::
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete más 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**: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.
- **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y Sorteos Festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo.
.. _2.1.9_py:
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. Manipulamos
el joystick y mostramos los resultados en la pantalla.
Componentes Requeridos
------------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/image317.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 enlaces a continuación.
.. 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 e Y son analógicos, por lo que es necesario utilizar
el ADC0834 para convertir el valor analógico a valor digital. Los datos del
eje Z son digitales, por lo que puedes leerlos directamente con GPIO, o también
puedes usar ADC para leerlos.
.. image:: ../img/image319.png
.. image:: ../img/image320.png
Procedimientos Experimentales
-----------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../img/image193.png
**Paso 2:** Ve a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
sudo python3 2.1.9_Joystick.py
Después de ejecutar el código, gira el joystick, y los valores correspondientes
de x, y, Btn se mostrarán en la pantalla.
**Código**
.. note::
Puedes **Modificar/Restablecer/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``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import ADC0834
import time
BtnPin = 22
def setup():
# Configurar los modos GPIO en numeración BCM
GPIO.setmode(GPIO.BCM)
GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
ADC0834.setup()
def destroy():
# Liberar recursos
GPIO.cleanup()
def loop():
while True:
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
Btn_val = GPIO.input(BtnPin)
print ('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
time.sleep(0.2)
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt: # Cuando se presiona 'Ctrl+C', se ejecutará el programa destroy().
destroy()
**Explicación del Código**
.. code-block:: python
def loop():
while True:
x_val = ADC0834.getResult(0)
y_val = ADC0834.getResult(1)
Btn_val = GPIO.input(BtnPin)
print ('X: %d Y: %d Btn: %d' % (x_val, y_val, Btn_val))
time.sleep(0.2)
VRX y VRY del Joystick están conectados a CH0 y CH1 de ADC0834 respectivamente.
Por lo tanto, se llama a la función getResult() para leer los valores de CH0 y CH1.
Luego, los valores leídos se deben almacenar en las variables x_val y y_val. Además,
lee el valor de SW del joystick y almacénalo en la variable Btn_val. Finalmente,
los valores de x_val, y_val y Btn_val se imprimirán con la función print().
Imagen del Fenómeno
-----------------------
.. image:: ../img/image194.jpeg