极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12005|回复: 0

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

[复制链接]
发表于 2015-9-5 10:48:20 | 显示全部楼层 |阅读模式
写了一个通过Pc键盘输入控制舵机转角的程序

Ariduno 代码
  1. int servopin=9;//定义数字接口9 连接伺服舵机信号线
  2. int myangle;//定义角度变量
  3. int pulsewidth;//定义脉宽变量
  4. int val=0;
  5. void servopulse(int servopin,int myangle)//定义一个脉冲函数
  6. {
  7. pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
  8. digitalWrite(servopin,HIGH);//将舵机接口电平至高
  9. delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
  10. digitalWrite(servopin,LOW);//将舵机接口电平至低
  11. delay(20-pulsewidth/1000);
  12. }
  13. void setup()
  14. {
  15. pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
  16. Serial.begin(9600);//连接到串行端口,波特率为9600
  17. Serial.println("servo=o_seral_simple ready" ) ;
  18. }
  19. void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
  20. {
  21. if(Serial.available()>0
  22. {
  23. val=Serial.read();//读取串行端口的值
  24. if(val>'0'&&val<='9')
  25. {
  26. val=val-'0';//将特征量转化为数值变量
  27. val=val*(180/9);//将数字转化为角度
  28. for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
  29. {
  30. servopulse(servopin,val);//引用脉冲函数
  31. }
  32. }
  33. }
  34. delay(100)
  35. Serial.print("moving servo to ");
  36. Serial.print(val,DEC);
  37. Serial.println();


  38. }
复制代码


Python 代码。 键盘输入1~ 9 数字。 键盘输入小写字母“e”,则退出
  1. #coding utf8
  2. from threading import Thread
  3. from Queue import Queue
  4. from time import sleep
  5. import msvcrt
  6. import serial

  7. q=Queue(10)
  8. s=serial.Serial(8)

  9. f1=True

  10. def kbfunc():
  11.     x=msvcrt.kbhit()
  12.     if x:
  13.         ret=msvcrt.getch()
  14.     else:
  15.         ret = 0
  16.     return ret

  17. class a(Thread):
  18.     def run(self):
  19.         global q
  20.         global f1
  21.         while f1:
  22.             line=s.readline()
  23.             print line
  24.             sleep(0.005)


  25. class b(Thread):
  26.     def run(self):
  27.         global q
  28.         global f1
  29.         while f1:
  30.             a=kbfunc()
  31.             if a==0:
  32.                 sleep(0.01)
  33.                 continue
  34.             elif a=="e":
  35.                 s.close()
  36.                 f1=False
  37.             else:
  38.                 s.write(a)
  39.                 s.flush()



  40. t1=a()
  41. t2=b()
  42. t1.start()
  43. t2.start()
  44. t1.join()
  45. t2.join()
  46. print "Game over"
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 11:50 , Processed in 0.033963 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表