我正在使用Arduino Uno来构建一个非常简单的向前移动的机器人,当它感知任何物体时(使用距离传感器HC-SR04
),它会停止移动。机器人底座是4轮和每个车轮连接的直流电机。我使用引脚1,2,3,4分别用于控制电机1,2,3,4。引脚7,8用于距离传感器HC-SR04
的Echo和Trig引脚。
为此,我写了以下代码
#define m1p1 1
#define m1p2 2
#define m2p1 3
#define m2p2 4
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED
int maximumRange = 200; // Maximum range needed
int minimumRange = 4; // Minimum range needed
long duration, distance; // Duration used to calculate distance
void setup()
{
Serial.begin(9600);
pinMode(m1p1, OUTPUT);
pinMode(m1p2, OUTPUT);
pinMode(m2p1, OUTPUT);
pinMode(m2p2, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}
void loop()
{
//Code to run motors forward
digitalWrite(m1p1, LOW);
digitalWrite(m1p2, HIGH);
digitalWrite(m2p1, HIGH);
digitalWrite(m2p2, LOW);
//Code of distance sensor
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/58.2;
if (distance >= maximumRange || distance <= minimumRange){
Serial.println("-1");
//Code to stop motors
digitalWrite(m1p1, LOW);
digitalWrite(m1p2, LOW);
digitalWrite(m2p1, LOW);
digitalWrite(m2p2, LOW);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading.
*/
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}
//Delay 50ms before next reading.
delay(50);
}
我认为问题在于包含Serial.begin(9600)
的行,因为当我删除此行时,所有电机都正常运行,机器人正向运行,但是当我写这行时,只有2台电机运行平稳,2台电机运转非常缓慢(几乎看起来它们没有运行),所以不再向前移动,机器人不断转动。
任何人都可以告诉问题是什么以及如何解决这个问题。
答案 0 :(得分:2)
答案 1 :(得分:1)
来自http://arduino.cc/en/Main/arduinoBoardUno:
此外,一些引脚具有专门的功能:
串行:0(RX)和1(TX)。用于接收(RX)和发送(TX)TTL串行数据。这些引脚连接到ATmega8U2 USB-to-TTL串行芯片的相应引脚。
Serial
使用引脚0和1.因此,您不能同时将它们用于其他目的。我建议您使用其他引脚来驱动电机(例如2到5个)。