用arduino代码控制两个直流电机和伺服
controlling two dc motors and servo with arduino code
该代码似乎无法正常工作,但我也刚刚开始学习如何编写 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.
那里有几个问题。
让我们从编译错误开始:
- 您有两个函数
turnLeft
和两个函数 moveForward
。我假设第二对应该是 turnRight
和 moveBackwards
.
- 在你调用的
moveForward
函数中 servoRight(0)
这应该是 servoRight.write(0)
.
修复此问题应该可以让您的代码编译,但它仍然无法运行:
- 您已经定义了引脚,但它们没有连接到舵机(没有调用
attach
)。
- 你提到了一个伺服电机和两个直流电机,那为什么你的代码有三个伺服电机? (伺服三针中只有一个连接到数字端口,另外两个用于供电)。
delay
、write(180)
和 write(0)
是怎么回事,你想在那里做什么?
- write(0.6) 不会将角度增加 0.6 度。您需要跟踪当前角度或
read()
从 servo
.
简而言之,阅读一些教程 (like this),进行实验并从中获得乐趣。
该代码似乎无法正常工作,但我也刚刚开始学习如何编写 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.
那里有几个问题。
让我们从编译错误开始:
- 您有两个函数
turnLeft
和两个函数moveForward
。我假设第二对应该是turnRight
和moveBackwards
. - 在你调用的
moveForward
函数中servoRight(0)
这应该是servoRight.write(0)
.
修复此问题应该可以让您的代码编译,但它仍然无法运行:
- 您已经定义了引脚,但它们没有连接到舵机(没有调用
attach
)。 - 你提到了一个伺服电机和两个直流电机,那为什么你的代码有三个伺服电机? (伺服三针中只有一个连接到数字端口,另外两个用于供电)。
delay
、write(180)
和write(0)
是怎么回事,你想在那里做什么?- write(0.6) 不会将角度增加 0.6 度。您需要跟踪当前角度或
read()
从servo
.
简而言之,阅读一些教程 (like this),进行实验并从中获得乐趣。