【问题标题】:Arduino-seeed motor shield v2Arduino-seed 电机屏蔽 v2
【发布时间】:2019-10-13 11:20:56
【问题描述】:

我的问题可能很简单,但我无法弄清楚。 我正在使用 arduino uno、seeedstudio motor shield v2 和轮式编码器。问题是,这个盾牌的示例代码如下所示:

void loop()
{
motor.speed(0, 100);            // set motor0 to speed 100
delay(1000);
motor.brake(0);                 // brake
delay(1000);
motor.speed(0, -100);           // set motor0 to speed -100
delay(1000);
motor.stop(0);                  // stop
delay(1000);
}

但是延迟是阻塞的,因此我似乎可以计算编码器脉冲(大概)。我尝试过不同的millis() 实现,但编码器读取的数字是千分之十/负数。

【问题讨论】:

    标签: arduino encoder


    【解决方案1】:

    您的代码中没有车轮编码器,但我认为您的问题是 delay 是一个阻塞函数。

    在不阻塞程序的情况下检查时间是否已过的最简单方法是手动检查自上次指令以来是否已过时间。举个例子:

    void loop()
    {
        unsigned long previous_time = millis();
        motor.speed(0, 100);  
        while (millis() - previous_time < 1000) 
        {
            // do something (check the encoder for instance
        }
    }
    

    这样,您就可以在等待延迟完成时执行其他指令。当然你可以把这个检查放在一个函数中。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多