es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teclado numérico con Arduino Nano

He estado intentando hacer un teclado numérico usando un Arduino Nano. Sé que el Nano no puede utilizar la biblioteca <keyboard.h>. Ya tengo todos los conceptos básicos, pero todavía tengo un problema. Cada vez que presiono una tecla demasiado rápido, las entradas se acumulan y llego a algún tipo de límite con Pyautogui. Aquí está el script en Python.

import serial
import keyboard
import time
import pydirectinput
import pyautogui

ser = serial.Serial('COM4', baudrate=9600)
time.sleep(2)
ser.flushInput()
while True:
    ser_bytes = ser.readline()
    print(ser_bytes)
    if (ser_bytes == b'w\r\n'):
           print("Presionar")
           pydirectinput.keyDown('w')
           pydirectinput.keyUp('w')

El límite parece estar alrededor de un comando “keyDown” “keyUp” por segundo. Usando el monitor y el trazador de series del Arduino, la señal funciona bien, así que hay algo mal con el script en Python.

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Gracias por contactarnos con tu pregunta sobre el Arduino Nano y los problemas que estás enfrentando con tu script de Python.

    Parece que estás experimentando problemas con la entrada de datos apilándose uno encima del otro cuando presionas una tecla demasiado rápido, y estás alcanzando algún tipo de límite de escritura con Pyautogui.

    Según el script de Python que has proporcionado, parece que estás leyendo la entrada serial desde el Arduino a través de la biblioteca pyserial, y luego utilizando pydirectinput para simular la entrada del teclado basada en los datos seriales recibidos.

    Una posible solución para el problema que estás enfrentando podría ser modificar el script de Python para eliminar los rebotes de la entrada del teclado. El rebote es una técnica utilizada para eliminar señales falsas o espurias causadas por el rebote de contacto en interruptores mecánicos o, en tu caso, en el teclado. Esto implicaría agregar alguna demora a tu código para asegurarte de que solo se registre una pulsación de tecla a la vez, incluso si se presionan varias teclas rápidamente.

    Otra posible solución sería modificar el firmware del Arduino Nano para implementar un algoritmo de eliminación de rebotes. Esto implicaría agregar una demora en el firmware que evite que el Nano envíe múltiples señales cuando una tecla se presione o se suelte rápidamente.

    Finalmente, vale la pena señalar que pyautogui puede no ser la biblioteca más eficiente para simular la entrada del teclado en tiempo real. Hay otras alternativas como pynput o keyboard que pueden funcionar mejor para tu caso de uso.

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta o inquietud adicional.

Comments are closed.