Nota

¡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 [Aquí] y únete hoy mismo!

2.1.9 Joystick

Nota

../_images/mcp3008_and_adc0834.jpg

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.

../_images/2.1.9_joystick_list.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los siguientes enlaces.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

Módulo Joystick

-

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.

../_images/2.1.9_joystick_schematic_1.png ../_images/2.1.9_joystick_schematic_2.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/2.1.9_Joystick_circuit.png

Paso 2: Ve a la carpeta del código.

cd ~/raphael-kit/python-pi5

Paso 3: Ejecuta.

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.

Advertencia

Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.

Código

Nota

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.

#!/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

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

    #!/usr/bin/env python3
    from gpiozero import Button
    import ADC0834
    import time
    
  2. Inicializa un botón conectado al pin GPIO 22 y configura el módulo ADC0834 para su uso.

    # Inicializa el botón conectado al pin GPIO 22
    BtnPin = Button(22)
    
    # Configura el ADC0834
    ADC0834.setup()
    
  3. 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().

    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