2013-09-05 44 views
1

我使用Arduino Uno构建了一个非常简单的机器人,它向前移动,当它感应到任何物体时(使用距离传感器HC-SR04),它停止移动。机器人底座有四个轮子,每个轮子都装有直流电机。我使用引脚1,2,3,4分别控制电机1,2,3,4。引脚7,8用于距离传感器HC-SR04的Echo和Trig引脚。Arduino:Serial.begin()与运行直流电机的代码冲突

为此,我写了下面的代码

#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个电机运行非常缓慢(几乎看起来他们没有运行),所以不是向前移动机器人不断转动。

任何人都可以告诉可能是什么问题,以及如何解决这个问题。

回答

1

http://arduino.cc/en/Main/arduinoBoardUno

此外,一些引脚有专门的功能:

串行:0(RX)和1(TX)。用于接收(RX)和发送(TX)TTL串行数据。这些引脚连接到ATmega8U2 USB-to-TTL串行芯片的相应引脚。

Serial使用引脚0和1.因此,您不能同时使用它们到另一个目的。我建议您使用其他引脚来驱动您的电机(例如2至5)。