单片机/MCU论坛
直播中

张虎豹

7年用户 1583经验值
私信 关注
[问答]

Arduio控制舵机根本不按照写的转动是为什么?

准备用两个红外探头控制一个舵机的转动,探头是3.3V,舵机时5V的,写出来后舵机根本不按照写的转动,无规律的转,然后又试了一个探头控制舵机,是好的,两个探头控制源程序如下,哪个大佬帮忙看下是咋回事/?  感觉程序应该没错了,会不会是硬件连接问题,舵机和探头均未加电阻,板子是Arduion UNO

#include     // 声明调用Servo.h库
Servo myservo;        // 创建一个舵机对象
int zhi = 60;         //变量zhi用来储存舵机位置

void setup() {
    myservo.attach(5);  // 将引脚5上的舵机与声明的舵机对象连接起来
    pinMode(2 INPUT_PULLUP);  //将引脚4连接到探头1上拉   左
    pinMode(3 INPUT_PULLUP);  //将引脚5连接到探头2   右
}

void loop() {
   int va = digitalRead(2);      //定义探头1信号为va  左
   int vb = digitalRead(3);      //定义探头2信号为vb  右

   if(va == HIGH    vb== HIGH)     //直游
   {
   for(zhi =60; zhi < 120; zhi += 1){    // 舵机从60°转到120°,每次增加1°         
       myservo.write(zhi);           // 给舵机写入角度   
       delay(15);                    // 延时15ms让舵机转到指定位置
   }
     for(zhi = 120; zhi>=60; zhi-=1) {    // 舵机从120°转回到60°,每次减小1°                              
       myservo.write(zhi);        // 写角度到舵机     
      
        delay(15);                 // 延时15ms让舵机转到指定位置
     }
}
if(va == LOW    vb == HIGH)     //左游
   {
   for(zhi =60; zhi < 100; zhi += 1){    // 舵机从60°转到100°,每次增加1°         
       myservo.write(zhi);           // 给舵机写入角度   
       delay(15);                    // 延时15ms让舵机转到指定位置
   }
     for(zhi = 100; zhi>=60; zhi-=1) {    // 舵机从100°转回到60°,每次减小1°                              
       myservo.write(zhi);        // 写角度到舵机     
      
        delay(15);                 // 延时15ms让舵机转到指定位置
     }
}
if(va == HIGH    vb == LOW)     //右游
   {
   for(zhi =80; zhi < 120; zhi += 1){    // 舵机从80°转到120°,每次增加1°         
       myservo.write(zhi);           // 给舵机写入角度   
       delay(15);                    // 延时15ms让舵机转到指定位置
   }
     for(zhi = 120; zhi>=80; zhi-=1) {    // 舵机从120°转回到80°,每次减小1°                              
       myservo.write(zhi);        // 写角度到舵机     
      
        delay(15);                 // 延时15ms让舵机转到指定位置
     }
}


回帖(1)

李志刚

2023-11-6 15:27:52
先检查直接控制舵机是否正常
再通过串口打印,
看看你的那个zhi,va,vb的数值到底是多少
举报

更多回帖

发帖
×
20
完善资料,
赚取积分