.. 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