Arduino自带延时库,控制4个9g舵机

/*控制4个舵机旋转*/

#define  gear1  10      // 舵机1
#define  gear2  11
#define  gear3  12
#define  gear4  13

int flag1 = 0;                     //舵机启动/停止标志位
int flag2 = 0;                    
void servopulse(int sp1,int val);
void servo_run(int pin,int angle );

void setup() {
    pinMode(gear1,OUTPUT);
    pinMode(gear2,OUTPUT);
    pinMode(gear3,OUTPUT);
    pinMode(gear4,OUTPUT);
}

void loop() {
  if(!flag1)                                   //执行第一组动作
  {
    servo_run(gear1,150);     // gear1旋转到0度                       
    servo_run(gear2,0);     //gear2旋转到0度                                          
    servo_run(gear3,90);     //gear3旋转到90度
    servo_run(gear4,180);    //gear4旋转到180度
    flag1 = 1;              //达到指定位置,让舵机停下 
  }                     
     
//    if(!flag2)                                //执行第二组动作
//  {
//      servo_run(gear1,180);     // gear1旋转到180度
//      servo_run(gear2,180);     //gear2旋转到180度                                          
//      servo_run(gear3,180);     //gear3旋转到180度
//      servo_run(gear4,180);    //gear4旋转到180度
//     flag2= 1;              //达到指定位置,让舵机停下 
//  }   
}

void servopulse(int addr,int val)//定义一个脉冲函数
{
    int angle2us;
    angle2us=map(val,0,180,500,2480);   //0-180度 映射到500~2480us
    digitalWrite(addr,HIGH);//将舵机接口电平至高
    delayMicroseconds(angle2us);//延时脉宽值的微秒数
    digitalWrite(addr,LOW);//将舵机接口电平至低
    delay(20-angle2us/1000);   //延迟到20ms
}
void servo_run(int pin,int angle )        //给定足够时间达到指定位置
{  
    for(int i = 0 ; i < 50; i++)          //若未达到指定位置,延长循环次数即可   给定时间为30*20ms
     servopulse(pin,angle);
}

这个很简单了,延时函数模拟PWM,会让单片机工作的没有效率··· 

 参考这个更好些:https://blog.csdn.net/qq_41736190/article/details/81907936

你可能感兴趣的:(Arduino自带延时库,控制4个9g舵机)