Saturday, June 10, 2017

Joystick Master System + Arduíno + Python

Há vários anos, tive guardado em meu armário o controle de meu master system, (aquele da TecToy), então, tentei usa-lo no meu computador, conectando ao meu Arduíno e fazendo a interpretação dos botoes com Python para ele interagir com o windows.


Usei um código de leitura dos botoes do Joystick e mandei os valores direto para a serial para fazer a leitura via Python
Em meu código precisei usar bibliotecas auxiliares:



                  '-----------------------       libs       ------------------------------'
  • py_Serial: leitura da serial.
  • re :  encontrar as letras em minha serial, de forma mais eficiente.
  • pyautogui: interação do Python com windows.
  • win32com: interação do Python com windows, mais rápida que a pyautogui, contudo parou de responder, então tive que substitui-la
Código esta escrito abaixo não é lá grande coisa, mais por falta de pratica em programação fiz o máximo e pouco tempo.

Videos:



from ctypes import py_object
from json.encoder import py_encode_basestring_ascii
import serial
import re
#import win32com.clientimport time
import pyautogui

ser = serial.Serial()
ser.baudrate= 250000ser.port = 'COM9'ser.timeout = 5ser.open()
a = 1while a == 1:
    s = ser.read(15)
    l1 = re.findall('[A-Z]', s)
    nu = len(re.findall('[A-Z]', s))
    while l1 != []:
        if  nu == 1:
            b1 = l1[0]
            print("Tecla pressionada ", b1)
            pyautogui.press(b1)
            #win32com.client.Dispatch("WScript.Shell").SendKeys(b1)            ser.reset_input_buffer()
        if nu == 2:
            l1 = re.findall('[A-Z]', s)
            b1 = l1[0]
            b2 = l1[1]
            pyautogui.press(b1) and pyautogui.press(b2)
            #win32com.client.Dispatch("WScript.Shell").SendKeys(b1) and win32com.client.Dispatch("WScript.Shell").SendKeys(b2)            print("Teclas pressionadas ", b1, " e ", b2)
            ser.reset_input_buffer()
        if nu == 3:
            l1 = re.findall('[A-Z]', s)
            b1 = l1[0]
            b2 = l1[1]
            b3 = l1[2]
            #win32com.client.Dispatch("WScript.Shell").SendKeys(b1) and win32com.client.Dispatch("WScript.Shell").SendKeys(b2) and win32com.client.Dispatch("WScript.Shell").SendKeys(b3)            pyautogui.press(b1) and pyautogui.press(b2) and pyautogui.press(b3)
            print("Teclas pressionadas ", b1, " , ", b2," e ", b3)
        l1 = re.findall('[A-Z]',ser.read(15))
        ser.reset_input_buffer()
    print(l1)






Share: