我正在尝试将Arduino避免机器人编码为学习项目。当我运行以下代码时,只有一个电机(左侧)工作。如果我注释掉使用checkDistance()函数的if语句并且只是循环forward()函数,那么两个电机都可以正常工作。我正在使用Adafruit Motorshield v1.2,我相信这是马达:Link。我已尝试直接通过USB供电,也通过外部电源(4 x AAs),并遇到同样的问题。任何指针将不胜感激。谢谢!
#include <AFMotor.h>
#define trigPin 3
#define echoPin 2
AF_DCMotor left_motor(2, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor right_motor(1, MOTOR12_64KHZ); // motor #2\
int maxDistance = 30;
//int minDistance = 0;
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
left_motor.setSpeed(255);
right_motor.setSpeed(255);
}
void forward(int delayTime) {
left_motor.run(FORWARD);
right_motor.run(FORWARD);
delay(delayTime);
}
void backward(int delayTime) {
left_motor.run(BACKWARD);
right_motor.run(BACKWARD);
delay(delayTime);
}
void stop(int delayTime) {
left_motor.run(RELEASE);
right_motor.run(RELEASE);
delay(delayTime);
}
void right(int delayTime) {
left_motor.run(FORWARD);
right_motor.run(BACKWARD);
delay(delayTime);
}
void left(int delayTime) {
left_motor.run(BACKWARD);
right_motor.run(FORWARD);
delay(delayTime);
}
int checkDistance(){
long duration, distance;
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/59.1;
return distance;
}
void loop() {
int currentDistance = checkDistance();
Serial.print(currentDistance);
if (currentDistance >= maxDistance){
Serial.println(" cm. No immediate obstacles detected. Moving forward.");
forward(2000);
stop(1000);
}
else {
Serial.println(" cm. Obstacle detected. Changing direction.");
right(1500);
stop(1000);
}
}
答案 0 :(得分:0)
如果我试图调试这个,我会首先测试每个电机功能,而不需要传感器进行任何逻辑检查。 (例如,当左,右,后等两个轮子在循环()中被调用时,两个轮子都会转向正确的方向。这将使人们确信它不是布线或其他硬件问题。如果它们不起作用,那么将其分类就可以为你提供一个起点。
如果它们有效,那么它必须是传感器的值,对吗?您是如何确定maxDistance
值的?如果它太高,那么这一行:
if (currentDistance >= maxDistance){
可能永远不会评估为真。你有一些日志语句,所以你对currentDistance
的价值有所了解。当您将物体放置在离传感器不同的距离时,它似乎反映了准确的值吗?