【原创】用python和arduino超简单做一个小键盘/手柄(交流贴)
本帖最后由 Jumper 于 2012-8-28 15:44 编辑自学了一阵python,但一直不精,一直想让python和arduino配合配合 这才发现了python的强大。
做了一个四个独立按键的小键盘。
我写的这个还不是很完善,也算不上教程。 就是大家交流交流。思路就是用arduino感应键盘,通过串口通讯发送到电脑,再用python模拟出来按键。
电路非常简单可以参考弘大的那篇帖子http://www.geek-workshop.com/thread-74-1-1.html
(ps本来想想偷懒用帖子里第一个方法的结果干扰太大没办法最后电阻电容一个都没少)
用的是2,3,4 ,5端口
先上代码: int key;
void setup()
{
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
Serial.begin(9600);
delay(1000) ;
}
void loop()
{
key=0;
if(digitalRead(2)==HIGH)//由于本例检测上升沿触发,所以先检测输入是否低电平,
{
delay(10); //然后延时一段时间,
if(digitalRead(2)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
key=key+1;
}
if(digitalRead(3)==HIGH)
{
delay(10);
if(digitalRead(3)==HIGH)
key=key+2;
}
if(digitalRead(4)==HIGH)
{
delay(10);
if(digitalRead(4)==HIGH)
key=key+4;
}
if(digitalRead(5)==HIGH)
{
delay(10);,
if(digitalRead(5)==HIGH)
key=key+8;
}
Serial.write(key);
}
这是python端的代码
需要用到pyserial和pywin32这两个模块
http://pypi.python.org/pypi/pyserial
http://sourceforge.net/projects/pywin32/
import win32api
import win32con
import time
import serial
import string
key1=0
key2=0
key3=0
key4=0
#配置串口通信
ser = serial.Serial()
ser.baudrate = 9600#波特率
ser.port = 7#从0开始是COM1 这里7就是COM8
ser.open()#打开端口
time.sleep(1)#小憩一秒
while True:
date = string.atoi(ser.readline())#ser.readline()是读取一行数据 直到遇到/n ;string.atoi()是将字符串型转化为整形
if date%2!=key1:
key1=date%2
if key1:
win32api.keybd_event(65,0,0,0)#a键位码是86
else:
win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
if date%4/2!=key2:
key2=date%4/2
if key2:
win32api.keybd_event(66,0,0,0)#b键位码是66
else:
win32api.keybd_event(66,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
if date%8/4!=key1:
key3=date%8/4
if key3:
win32api.keybd_event(67,0,0,0)#c键位码是67
else:
win32api.keybd_event(67,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
if date/8!=key4:
key4=date/8
if key4:
win32api.keybd_event(68,0,0,0)#d键位码是68
else:
win32api.keybd_event(68,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
写在最后: 在执行那个ser.open()之前需要把arduino先插进电脑端口,而且没有其他程序占用。
对于arduino爱好者来说,电路完全没难度,可能python部分才是问题。。。。。。想我这样没有Leonardo,也不会焊电路的小白来说可能是最省事的方法了。还有经过测试。。。。。貌似按不住键盘。。。。可能python代码还有问题。。。。欢迎高手指导
如果不屑于本文的软件方法可以参考http://www.geek-workshop.com/thread-1192-1-1.html
附个键位码表:
字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
A 65 0 96 F1 112 Backspace 8
B 66 1 97 F2 113 Tab 9
C 67 2 98 F3 114 Clear 12
D 68 3 99 F4 115 Enter 13
E 69 4 100 F5 116 Shift 16
F 70 5 101 F6 117 Control 17
G 71 6 102 F7 118 Alt 18
H 72 7 103 F8 119 Caps Lock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10121 Spacebar 32
K 75 * 106 F11122 Page Up 33
L 76 + 107 F12123 Page Down 34
M 77 Enter 108 -- -- End 35
N 78 - 109 -- -- Home 36
O 79 . 110 -- -- Left Arrow 37
P 80 / 111 -- -- Up Arrow 38
Q 81 -- -- -- -- Right Arrow 39
R 82 -- -- -- -- Down Arrow 40
S 83 -- -- -- -- Insert 45
T 84 -- -- -- -- Delete 46
U 85 -- -- -- -- Help 47
V 86 -- -- -- -- Num Lock 144
------------------------------------------------------------------------------------------------------------------------------
这是我写的用python获取cpu占用率 用串口发送到arduino上再通过5110显示出来。网友要是喜欢我抽空在写出来,大家交流交流。
不是我打击你,只能说这不是好的点子,你试试qq就就明白了。也不支持其他系统。只能说这是个原型吧。但支持是必须的!你可以转型一下,做个dota keal的改建键盘,嘻嘻。我做的那个源码在google code 的dota keal rekey,也是python的,很好整合 好东西,不错!! 不错,原来python这么强大啊 不错哈,好玩! PureGold 发表于 2012-8-29 05:36 static/image/common/back.gif
不是我打击你,只能说这不是好的点子,你试试qq就就明白了。也不支持其他系统。只能说这是个原型吧。但支持 ...
嘻嘻你说的没错 确实没法移植也不好往后再开发 我看了你下你的 写的不错我昨天看到用python模拟键盘的文章就突然联想到能不能用它达到makey的功能呢于是就捎带手试试写了一下 还是新手以后还请指教 不是啦,我也是新手。只是想提一些意见,觉得你这个程序模式真的不好,没有别的意思呀:) 这也可以啊,不错哇 很强大,学习了。 正在学习python,谢谢楼主。期待你将CPU占用发到arduino+5110上展示的教程。 不错,Python我也会一点,有空发挥一下它的威力 这个好!python容易编辑,如果可以有托管键盘,串口,读写文件,执行关闭程序,甚至访问网络的例子的话,就可以基本控制电脑软件了。 没看到亲怎么用 python 读取 cpu 的数据啊?
上面倒不是关键,我刚学会了用 pyserial 从串口读数据,看你那个截图是往里写数据---看到写例子了,但是不知道 arduino 怎么取这些数据... 。。。有没可以参考的资料哈?
多谢先... 自娱自乐, 自作自受。 不错,Python我也在学习,有空发挥一下它的威力
页:
[1]