主要是要通过writeMicroseconds() 设定舵机旋转角度要添加Servo.h
代码教程原理,可以看看:https://www.cnblogs.com/rayray/archive/2013/04/12/3015172.html
#include <Servo.h> #define PIN_SERVO 10 Servo myservo; void setup() { myservo.attach(PIN_SERVO); } void loop() { myservo.write(0); delay(1000); myservo.write(80); delay(1000); myservo.write(160); delay(1000); myservo.write(80); delay(1000); myservo.write(0); delay(1000); }
使用Arduino的PWM输出,有个Servo.h的库里面包含一些算法
参考http://blog.sina.com.cn/s/blog_5e4725590100d3sf.html
这个程序,在串口输入角度,然后多级就转到那个角度了
调试很方便
#include <Servo.h> Servo myservo; int last_pos=10; int char_to_int(char i) { switch(i) { case '0':return 0; case '1':return 1; case '2':return 2; case '3':return 3; case '4':return 4; case '5':return 5; case '6':return 6; case '7':return 7; case '8':return 8; case '9':return 9; default: return 0; } } void setup() { // put your setup code here to run once: Serial.begin(9600); pinMode(23OUTPUT); myservo.attach(23); myservo.write(last_pos); delay(2000); } void loop() { // put your main code here to run repeatedly: char abc; int i; while(!Serial.available());//等待数据 if(Serial.available()) { a=Serial.read(); delay(3); } if(Serial.available()) { b=Serial.read(); delay(3); } if(Serial.available()) { c=Serial.read(); delay(3); } if(b==NULL) { i=char_to_int(a); Serial.println(iDEC); } else if(c==NULL) { i=char_to_int(a)*10+char_to_int(b); Serial.println(iDEC); } else { i=char_to_int(a)*100+char_to_int(b)*10+char_to_int(c); Serial.println(iDEC); } if(i>last_pos) { for(;last_pos<i;last_pos++) { myservo.write(last_pos); delay(10); } delay(1000); } else if(i<last_pos) { for(;last_pos>i;last_pos--) { myservo.write(last_pos); delay(10); } } }