查看: 1874|回复: 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-3-8 09:28
  • 签到天数: 97 天

    [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

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

    本版积分规则

    热门推荐

    学习记录2,Blinker读取温湿度
    学习记录2,Blinker读取温
    开关现在是使用得很6了,准备进行下一步,读取数据。 找了下官方的例程,发现用的是w
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    关于红外控制空调的模块选型
    关于红外控制空调的模块选
    想问问这中模块能支持arduino吗
    LCD1602只亮 不显示
    LCD1602只亮 不显示
    #include // initialize the library by associating any needed LCD interface pin
    18脚的8x8LED点阵如何使用??
    18脚的8x8LED点阵如何使用
    本帖最后由 Creeper666 于 2018-8-14 12:24 编辑 这个点阵模块上面一排有12个脚,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表