这是我参加第十一届海上航行器大赛 的 方案三:Arduino方案 中的控制舵机
详细的舵机控制 请参考好文-
第1种方法:为引脚写入电平,生成pwm
analogWrite(pin, value)
这种方法只能让舵机在 0~90度转 且输入的参数只能在 [70,350] 之间,否则会不动,达不到我的需求。
#define pinServo 11 /*舵机控制引脚 基于ATmega168和ATmega328的Arduino控制器中,
analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11*/
//舵机角度 测试出来的值
#define servoRight 70
#define servoMiddle 210
#define servoLeft 350
void setup()
{
Serial.begin(9600);// 串口初始化,波特率9600字节/秒
}
void loop()
{
prePWM = angle2Pwm(realAngle);//计算返回当前舵机角度对应的 PWM
analogWrite(pinServo,prePWM);
}
int angle2Pwm(int preAngle)
{//把角度转换成相应的 pwm
int realAngle;
prePWM = float(255*(float)preAngle / 360);
return prePWM;
}
第2种方法:调用Servo库,真香!
Servo库
能控制的角度范围较大,满足我的需求。nice
#include <Servo.h>
Servo myservo; //创建一个舵机控制对象
#define pinServo 11//舵机控制引脚 基于ATmega168和ATmega328的Arduino控制器中,analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11。
void setup()
{
myservo.attach(pinServo,500,2500); // 告知Arduino舵机的数据线连接在哪一个引脚上。
}
void loop()
{ //让舵机在0~180来回转动
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}