int servopin=3;//设置舵机驱动口为数字3
int myangle;//设置电机转角变量
int pulsewidth;//定义脉宽
int val;
void servopulse(int servopin, int myangle)
//定义一个脉冲函数,用模拟方式产生PWM值
{
pulsewidth=myangle*11+50;//将角度转化为500-2480的值 1980/180=11 1980是总脉宽变量 180是总角度 11是单位角度对应的脉冲量
digitalWrite(servopin,HIGH);//将舵机接口电平置高
delayMicroseconds(pulsewidth);//延时脉宽值微秒数
digitalWrite(servopin,LOW);//将舵机接口电平置低
delayMicroseconds(pulsewidth);
delay(20-pulsewidth/1000); //延时周期内剩余时间 20ms-高电平的延时毫秒数 20ms是总周期
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//设置波特率为9600
Serial.println("servo=o_seral_simple ready");
}
void loop()
//将0~9的数字转化为0~180 并让LED闪烁相应的次数
{
val=Serial.read();//读取串口收到数,为ASCII码
if(val>='0'&&val<='9');//判断收到数值是否符合范围
{
val=val-'0';//将ASCII码转换成数值
val=val*(180/9);//将数值转化成角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for (int i=0;i<=50;i++)
{
servopulse(servopin,val);//引用脉冲函数
}
}
}