Arduino IR-mottagaren kontroll dator (4 / 5 steg)
Steg 4: Python code på PC
Jag ska använda python att ta emot kommandon från arduino och översätta den till nyckel-pressar på datorn.
På datorn måste du installera python 2.7, win32 bibliotek och pySerial bibliotek.
Recieve.pyw
Jag använder tillägget .pyw, så det körs i bakgrunden.
importera följetong #The bibliotek för att kommunicera med arduino
importera serial.tools.list_ports #The bibliotek för att hitta arduino på PC
importera os
importera tråd #The bibliotek flera processer på samma gång
från att importera sömn #The bibliotek för förseningar
# Bibliotek för att simulera nyckel-pressar och få th status av funktioner
från win32gui import *
från win32api import *
från win32con import *
#The config filen du ska göra för din fjärrkontroll
från config_ir import *
#The namnet på arduino du vilja ansluta
namn = "Arduino Mega 2560"
#Get hamnen arduino är ansluten till
portar = list(serial.tools.list_ports.comports())
för p i hamnar:
IF(p[1][:len(Name)] == namn):
Port = p [0]
#Connect till arduino
ser = följetong. Följetong (port, 9600)
#function att få lock-tangenten och skicka om de ändrar
def lock():
caps_old = 0
numl_old = 0
scrl_old = 0
Sleep(1)
medan 1:
lock = GetKeyState(VK_CAPITAL) & 0x0001
numl = GetKeyState(VK_NUMLOCK) & 0x0001
s.c.r.l. = GetKeyState(VK_SCROLL) & 0x0001
om (caps! = caps_old):
ser.write(Chr(1))
caps_old = caps
om (numl! = numl_old):
ser.write(Chr(2))
numl_old = numl
om (s.c.r.l.! = scrl_old):
ser.write(Chr(3))
scrl_old = s.c.r.l.
Sleep(0.1)
#Function för läsning av fjärrdata och binda den till ett nyckel-press
def read_serial():
medan 1:
data = 0
#get data
data = int(ser.readline())
#Determine som knappar du var och vad det ska göra
om (data == int(Mute)):
keybd_event (VK_VOLUME_MUTE, 0,0,0) #Mute
Elif (data == int(Vol_up)):
keybd_event (VK_VOLUME_UP, 0,0,0) #Vol +
Elif (data == int(Vol_down)):
keybd_event (VK_VOLUME_DOWN, 0,0,0) #Vol -
Elif (data == int(Back)):
keybd_event (VK_BROWSER_BACK, 0,0,0) #Back
Elif (data == int(Play)):
keybd_event (VK_MEDIA_PLAY_PAUSE, 0,0,0) #Play/Pause
Elif (data == int(My_media)):
OS.system ("starta C:\Users\Laurens\Videos") #My Media
Elif (data == int(Up)):
keybd_event (VK_UP, 0,0,0) #Up
Elif (data == int(Right)):
keybd_event (VK_RIGHT, 0,0,0) #Right
Elif (data == int(Down)):
keybd_event (VK_DOWN, 0,0,0) #Down
Elif (data == int(Left)):
keybd_event (VK_LEFT, 0,0,0) #Left
Elif (data == int(OK)):
keybd_event (VK_RETURN, 0,0,0) #OK
annat:
passera
#Main slinga
försök:
#Start flera trådar
Thread.start_new_thread(lock,())
Thread.start_new_thread(read_serial,())
utom:
skriva ut "trampar inte fungerar"
#Do ingenting
medan 1:
passera
IR_codes.py
I den här filen måste du ändra arrayen "knappen" till alla knappar du vill. När du har gjort det måste du bara köra det här skriptet.
! Uppmärksamhet!
När du trycker på en tangent måste du trycka kort, annars tar det kommandot för nästa viktiga namn.
importera följetong #Communication bibliotek
importera serial.tools.list_ports
INP =]
skriva ut "Starta anslutning"
#Device att ansluta till
namn = "Arduino Mega 2560"
portar = list(serial.tools.list_ports.comports())
för p i hamnar:
IF(p[1][:len(Name)] == namn):
Port = p [0]
ser = följetong. Följetong (port, 9600)
#The knappar du vill mappa i programvaran.
#Add eller ta bort nyckeln du vill, men de får inte innehålla blanksteg!
knappen = ["Power", "Mute", "Vol_up", "Vol_down", "ch_up", "ch_down", "OK", "Upp", "Down", "Vänster", "Rätt", "Back", "Play", "Hem", "My_media", "Spola tillbaka", "Framåt", "Nästa", "Föregående", "Stop", "Exit", "Info", "TV_guide"]
#Insert varje knapp
för jag i intervall (0, len(button)):
INP.append(0)
Print "Tryck på knappen % (knappen) s" % {"knappen": knappen [i]}
INP [i] = ser.readline ().replace('\n', '').replace ('\r', '')
skriva ut ""
ser.Close()
config = öppna ("config_ir.py", "w")
#write knapparna till config-filen
för i i range(0,len(button)):
linje = knappen [i] + "=" "+ inp [i] +"'"
Skriv ut rad
config.write(Line)
config.write("\n")
config.Close()
#wait för retur
raw_input()
Om du har några frågor tveka inte att fråga.