Возможные неисправности при работе с контроллерами
Собранный робот не двигается после загрузки скетча и включении питания на Power Module
В процессе работы робота контроллер постоянно перезапускается
Робот едет не в ту сторону или крутится на месте
В поворотах робот постоянно вылетает с траектории движения
Робот не видит препятствия или некорректно объезжает их
Робот не слушается команд с пульта дистанционного управления
Робот не двигается в какую-то из сторон
#define E1 6 //Вывод платы расширения Motor Shield, используемый для контроля скорости мотора А.
#define E2 5 //Вывод платы расширения Motor Shield, используемый для контроля скорости мотора В.
#define M1 7 //Вывод платы расширения Motor Shield, используемый для контроля направления вращения мотора А.
#define M2 4 //Вывод платы расширения Motor Shield, используемый для контроля направления вращения мотора В.
int motorSpeed = 255; //Переменная для хранения скорости вращения моторов.
void motor_drive_config() //Инициализация платы расширения Motor Shield.
{
pinMode(M1, OUTPUT); //Назначение вывода M1 выходом.
pinMode(M2, OUTPUT); //Назначение вывода M2 выходом.
pinMode(E1, OUTPUT); //Назначение вывода E1 выходом.
pinMode(E2, OUTPUT); //Назначение вывода E2 выходом.
}
void move_forward() //Движение робота вперед.
{
digitalWrite(M1, HIGH); //Правое колесо вращается вперед.
digitalWrite(M2, HIGH); //Левое колесо вращается вперед.
analogWrite(E1, motorSpeed); //Скорость вращения правого колеса.
analogWrite(E2, motorSpeed); //Скорость вращения левого колеса.
}
void move_right() //Движение робота вправо.
{
digitalWrite(M1, LOW); //Правое колесо вращается назад.
digitalWrite(M2, HIGH); //Левое колесо вращается вперед.
analogWrite(E1, motorSpeed); //Скорость вращения правого колеса.
analogWrite(E2, motorSpeed); //Скорость вращения левого колеса.
}
void move_left() //Движение робота влево.
{
digitalWrite(M1, HIGH); //Правое колесо вращается вперед.
digitalWrite(M2, LOW); //Левое колесо вращается назад.
analogWrite(E1, motorSpeed); //Скорость вращения правого колеса.
analogWrite(E2, motorSpeed); //Скорость вращения левого колеса.
}
void move_stop() //Остановка робота.
{
digitalWrite(M1, LOW); //Правое колесо вращается назад.
digitalWrite(M2, LOW); //Левое колесо вращается назад.
analogWrite(E1, 0); //Снизить скорость вращения колеса до 0.
analogWrite(E2, 0); //Снизить скорость вращения колеса до 0.
}
void move_back() //Движение робота назад.
{
digitalWrite(M1, LOW); //Правое колесо вращается назад.
digitalWrite(M2, LOW); //Левое колесо вращается назад.
analogWrite(E1, motorSpeed); //Скорость вращения правого колеса.
analogWrite(E2, motorSpeed); //Скорость вращения левого колеса.
}
/* Функция, которая приводит робот в движение в зависимости от того, какой сигнал получен с ИК-приемника. Данные о направлении движения выводятся на дисплей.
*/
void move_sequentially()
{
move_forward(); //Двигаться вперед.
delay(1000); //Задержка величиной 1 с.
move_stop(); //Остановиться.
delay(500); //Задержка величиной 0,5 с.
move_back(); //Двигаться назад.
delay(1000); //Задержка величиной 1 с.
move_stop(); //Остановиться.
delay(500); //Задержка величиной 0,5 с.
move_right(); //Двигаться вправо.
delay(1000); //Задержка величиной 1 с.
move_stop(); //Остановиться.
delay(500); //Задержка величиной 0,5 с.
move_left(); //Двигаться влево.
delay(1000); //Задержка величиной 1 с.
move_stop(); //Остановиться.
delay(500); //Задержка величиной 0,5 с.
}
void setup() //Задание начальных параметров системы.
{
motor_drive_config(); //Инициализация платы расширения Motor Shield.
move_stop(); //Начальная позиция робота — робот не движется.
delay(1000); //Задержка величиной 1 с.
}
void loop() //Основной цикл
{
move_sequentially(); //двигаться в соответствии с тем, какая кнопка нажата.
}