写了一个通过Pc键盘输入控制舵机转角的程序
Ariduno 代码
- int servopin=9;//定义数字接口9 连接伺服舵机信号线
- int myangle;//定义角度变量
- int pulsewidth;//定义脉宽变量
- int val=0;
- void servopulse(int servopin,int myangle)//定义一个脉冲函数
- {
- pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
- digitalWrite(servopin,HIGH);//将舵机接口电平至高
- delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
- digitalWrite(servopin,LOW);//将舵机接口电平至低
- delay(20-pulsewidth/1000);
- }
- void setup()
- {
- pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
- Serial.begin(9600);//连接到串行端口,波特率为9600
- Serial.println("servo=o_seral_simple ready" ) ;
- }
- void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
- {
- if(Serial.available()>0
- {
- val=Serial.read();//读取串行端口的值
- if(val>'0'&&val<='9')
- {
- val=val-'0';//将特征量转化为数值变量
- val=val*(180/9);//将数字转化为角度
- for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
- {
- servopulse(servopin,val);//引用脉冲函数
- }
- }
- }
- delay(100)
- Serial.print("moving servo to ");
- Serial.print(val,DEC);
- Serial.println();
- }
复制代码
Python 代码。 键盘输入1~ 9 数字。 键盘输入小写字母“e”,则退出
- #coding utf8
- from threading import Thread
- from Queue import Queue
- from time import sleep
- import msvcrt
- import serial
- q=Queue(10)
- s=serial.Serial(8)
- f1=True
- def kbfunc():
- x=msvcrt.kbhit()
- if x:
- ret=msvcrt.getch()
- else:
- ret = 0
- return ret
- class a(Thread):
- def run(self):
- global q
- global f1
- while f1:
- line=s.readline()
- print line
- sleep(0.005)
- class b(Thread):
- def run(self):
- global q
- global f1
- while f1:
- a=kbfunc()
- if a==0:
- sleep(0.01)
- continue
- elif a=="e":
- s.close()
- f1=False
- else:
- s.write(a)
- s.flush()
- t1=a()
- t2=b()
- t1.start()
- t2.start()
- t1.join()
- t2.join()
- print "Game over"
复制代码 |