本帖最后由 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/
[pre lang="python" line="1"]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) #释放按键
[/code]
写在最后: 在执行那个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 F10 121 Spacebar 32
K 75 * 106 F11 122 Page Up 33
L 76 + 107 F12 123 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显示出来。网友要是喜欢我抽空在写出来,大家交流交流。
|