查看: 170|回复: 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的每日心情
    奋斗
    2018-8-13 11:53
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    发表于 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

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

    本版积分规则

    热门推荐

    G哥撸Arduino之:深入浅出串口通信(理论篇)
    G哥撸Arduino之:深入浅出
    继上一篇《深入浅出SPI通信》,本期我们接着聊聊arduino的另一种通信方式:串口通信
    DIY一个超炫酷“锹甲”机器人——Arduino Nrf24L01遥控机械臂
    DIY一个超炫酷“锹甲”机
    大家好,初来乍到,这是我最近DIY的作品,欢迎小伙伴们拍砖! 由于某些原因我把介绍都
    Visual Studio Code对esp32/8266编译的教程 (使用blinker库)
    Visual Studio Code对esp3
    前言,Arduino IDE对小程序来讲很好用,界面简单直观易用,但也就是因为过于的简单,
    Arduino+ESP8266接收服务器信息
    Arduino+ESP8266接收服务
    上一篇文章《Arduino+ESP8266上传数据到服务器》我们介绍了Arduino如何将数据上传到服
    Arduino 怎么读取24V光电开关的状态
    Arduino 怎么读取24V光电
    我在淘宝上买了一个光电开关,链接如下: https://detail.tmall.com/item.htm?id=5738
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表