Nota

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

2.1.6 Joystick

Nota

../_images/mcp3008_and_adc0834.jpg

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.

../_images/2.1.9_joystick_list.png

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.

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

Procedimientos del Experimento

Paso 1: Monta el circuito.

../_images/2.1.9_Joystick_circuit.png

Paso 2: Abre la carpeta del código.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Paso 3: Ejecuta el código.

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.

Advertencia

Si aparece el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulta Si gpiozero no funciona.

Código

Nota

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.

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

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

    #!/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 ADC
    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 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().

    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