查看: 1192|回复: 2

[未解决] 求助!舵机不工作时鬼畜乱抖动....

[复制链接]
  • TA的每日心情
    开心
    2018-8-7 15:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-8-7 15:57 | 显示全部楼层 |阅读模式
    我实现的是:一开始初始化4个舵机到角度1;按下开关,舵机摇臂开始从角度1到角度2来回运动;松开开关,舵机持续运动10秒后停止工作,回到角度1。
    这部分我已经实现了,但是问题是舵机停止工作后会存在鬼畜乱动的现象。

    我去查阅发现,可能是计时器信号没有断的原因,可以使用中断函数,加标志位?

    但是本人实在是菜鸟,咋加都不对,前来求助各位大佬。若有大佬愿意伸出援手,先说声感谢!!我把现在的编程帖在下面了。


    #include <Servo.h>
    //初始化4个舵机
    Servo myservo1, myservo2, myservo3, myservo4;
    
    int btn1 = 2;
    long time;
    int leds;
    
    //通电时的舵机角度
    int myservoIni = 90;
    
    //存储舵机角度值
    int pos = 0;
    
    void setup()
    {
    
      pinMode(13, OUTPUT);
      digitalWrite(LED_BUILTIN, LOW);
    
      //稳定性等待
      myservo1.attach(6);
      myservo2.attach(9);
      myservo3.attach(10);
      myservo4.attach(11);
      delay(200);
    
      pinMode(btn1, INPUT);
      digitalWrite(btn1, HIGH);
    }
    
    void loop() 
    {
    
      //舵机运行到初始化角度
      myservo1.write(myservoIni);
      myservo2.write(myservoIni);
      myservo3.write(myservoIni);
      myservo4.write(myservoIni);
      delay(10);
    
      //按钮1
      if (digitalRead(btn1) == LOW)
      {
    
        leds = 1;
        for (pos = 0; pos <= 180; pos += 1) 
        {
    
          myservo1.write(pos);
          myservo2.write(pos);
          myservo3.write(pos);
          myservo4.write(pos);
          delay(15);
    
        }
        for (pos = 180; pos >= 0; pos -= 1) 
        {
    
          myservo1.write(pos);
          myservo2.write(pos);
          myservo3.write(pos);
          myservo4.write(pos);
          delay(15);
    
        }
        digitalWrite(LED_BUILTIN, HIGH);
    
      } else {
    
        if (leds == 1)
        {
          time = millis();
          leds = 0;
        }
      }
    
      if (millis() - time > 10000)
      {
        digitalWrite(LED_BUILTIN, LOW);
        myservo1.write(pos);
        myservo2.write(pos);
        myservo3.write(pos);
        myservo4.write(pos);
        delay(15);
      }
    
    }
    
  • TA的每日心情
    奋斗
    2019-1-17 08:30
  • 签到天数: 82 天

    [LV.6]常住居民II

    发表于 2018-8-8 11:57 | 显示全部楼层
    myservo1.dettach();//试试不想让它动时,用这个。再用前,先attach
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-8-7 15:47
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2018-8-10 22:27 | 显示全部楼层
    wwwusr 发表于 2018-8-8 11:57
    myservo1.dettach();//试试不想让它动时,用这个。再用前,先attach

    谢谢!我后来发现是信号没断的原因。感谢!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    游戏机和开发板脑洞一下;这个本来就是开源的。
    游戏机和开发板脑洞一下;
    这个开发板和标准UNO是1;1的;通用。做在一起是因为可以不用游戏机时可以切换回来做开
    新人求助,关于舵机和限位开关。
    新人求助,关于舵机和限位
    新人求助社区各位哥哥姐姐,具体需要用航模遥控器的3段开关控制Arduino nano控制一个3
    基于MWC开源飞控DIY关键总结分享:
    基于MWC开源飞控DIY关键总
    很早就已经很想写这么一个帖,但总是由于各种原因没能落实,但最后还是找了时
    有关函数返回值的问题
    有关函数返回值的问题
    求助大神们,这个程序中有return返回值,但为什么有这个“ warning: return-statement
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表