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
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.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
|
- |
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.
Procedimientos Experimentales
Paso 1: Construye el circuito.
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
Esta sección importa la clase Button de la biblioteca
gpiozeropara manejar un botón conectado a un pin GPIO. También importa la bibliotecaADC0834para 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
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()
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_valyy_val. Además, se lee el valor SW del joystick y se asigna a la variableBtn_val. Los valores obtenidos dex_val,y_valyBtn_valse muestran posteriormente utilizando la funciónprint().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