叮叮叮叮 发表于 2015-9-5 10:48:20

用Python程序,通过键盘输入控制舵机转角

写了一个通过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"
页: [1]
查看完整版本: 用Python程序,通过键盘输入控制舵机转角