【问题标题】:controlling two dc motors and servo with arduino code使用 arduino 代码控制两个直流电机和伺服
【发布时间】:2015-06-05 02:16:09
【问题描述】:

代码似乎不起作用,但我也刚刚开始学习如何编写 arduino。我正在尝试运行两个直流电机和一个伺服作为机器人汽车的转向。我应该如何编写它才能正常工作。我要做的就是使用两个电机来驱动汽车前进,并使用伺服器为汽车提供方向。如何改进此代码?

    #include <Servo.h>


    int servoRightPin = 2;
    int servoLeftPin = 3;
    int servoDirPin = 4;
    Servo servoRight;
    Servo servoLeft;
    Servo servoDir;


    void turnLeft()
    {
    servoDir.write(0.6);
    delay(300000);
    servoLeft.write(180);
    servoRight.write(0);
    }

    void moveForward()
    {
    servoDir.write(0);
    delay(240000);
    servoLeft.write(180);
    servoRight(0);
    }

    void turnLeft()
    {
    servoDir.write(0.6);
    delay(300000);
    servoLeft.write(180);
    servoRight.write(0);
    }

    void moveForward()
    {
    servoDir.write(0);
    delay(240000);
    servoLeft.write(180);
    servoRight(0);
    }




    june_4_car.ino: In function 'void moveForward()':
    june_4_car.ino:25:15: error: no match for call to '(Servo) (int)'
    june_4_car.ino: In function 'void turnLeft()':
    june_4_car.ino:28:6: error: redefinition of 'void turnLeft()'
    june_4_car.ino:12:6: error: 'void turnLeft()' previously defined here
    june_4_car.ino: In function 'void moveForward()':
    june_4_car.ino:36:6: error: redefinition of 'void moveForward()'
    june_4_car.ino:20:6: error: 'void moveForward()' previously defined here
    june_4_car.ino:41:15: error: no match for call to '(Servo) (int)'
    Error compiling.

【问题讨论】:

    标签: arduino controls motordriver


    【解决方案1】:

    那里有几个问题。

    让我们从编译错误开始:

    1. 您有两个函数turnLeft 和两个函数moveForward。我假设第二对应该是 turnRightmoveBackwards
    2. 在您调用servoRight(0)moveForward 函数中,这应该是servoRight.write(0)

    修复这个问题应该可以让你的代码编译,但它仍然无法工作:

    1. 您已定义引脚,但它们未连接到伺服系统(未调用 attach)。
    2. 您提到了一个伺服和两个直流电机,那么为什么您的代码有三个伺服? (伺服三个引脚中只有一个连接到数字端口,另外两个用于供电)。
    3. delaywrite(180)write(0) 是怎么回事?你想在那里做什么?
    4. write(0.6) 不会将角度增加 0.6 度。您需要从servo 跟踪当前角度或read()

    简而言之,阅读一些教程 (like this),进行实验并玩得开心。

    【讨论】:

    • 从技术上讲,我希望机器人在户外跑道上行走。根据机器人的长度和轨道弯曲部分的半径,我计算出转向舵机必须向左转 0.6 度才能转弯。由于轨道上有两条直线和两条曲线,我让机器人重复左转并直行两次。另外我怎样才能让舵机运行一定的时间?例如,如果我想让舵机在直道上运行 240 秒,在弯道上运行 300 秒怎么办?我为此使用了延迟,但注意到它的功能错误。
    • 我发现运行直流电机的唯一函数是motors.write函数,但你只能将它用于Arduino机器人套件。我使用servoLeft 和servoRight 来运行直流电机?这可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多