Я использую Arduino Uno для создания очень простого робота, который движется вперед и когда он воспринимает какой-либо предмет (используя датчик расстояния HC-SR04
), он перестает двигаться. Основание робота - 4 колеса и двигатель постоянного тока, прикрепленный с каждым колесом. Я использую контакты 1, 2, 3, 4 для управления двигателями 1, 2, 3, 4 соответственно. Штыри 7, 8 используются для штырей Echo и Trig датчика расстояния HC-SR04
.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 двигателя работают очень медленно (почти кажется, что они не работают), поэтому вместо того, чтобы двигаться вперед, робот непрерывно поворачивается.
Может ли кто-нибудь сказать, что может быть проблемой и как ее решить.
Большое спасибо. Это была проблема, и она решена. – swdeveloper