Вопрос еще актуальный? Давай я помогу.
Твоя главная проблема: то, что для одного мотора двигаться вперед, то для второго - назад. Они же у тебя по разные стороны робота стоят? Правильно?
Проще всего написать скетч из подпрограмм:
moveForw() - движение вперед;
moveBack() - движение назад;
moveLeft() - движение влево;
moveRight() - движение вправо;
И отладить их, а только потом браться за любой алгоритм. Как, например, объезд препятствий.
Ошибка номер два: способ управления двигателями. Теоретически можно управлять двигателями через ШИМ и дискретно.
ШИМ - широтно-импульсная модуляция. Вариант, когда скорость движения вала двигателя зависит от длинны импульса.
Дискретно - включили - крутится, выключили - нет.
Судя по переменным, ты выбрал ШИМ с дискретным выбором направления движения.
Что это означает? Переменная pwmA - скорость вращения двигателя А, а переменная dirA - направление.
Но судя по программе у тебя чистое дискретное управление. Что имеет право быть, но является неправильным.
Если ты используешь ORduino, то у него встроенный контроллер ШИМ с управлением направления движения. Использовать его самый правильный вариант!!!
Пишем четыре описанных выше подпрограммы:
Сначала пишешь их самыми простыми. Вот пример:
(обрати внимание используется функция analogWrite вместо digitalWrite!!!)
- Код: Выделить всё
void moveForw()
{
analogWrite(pwmA, 255); - двигатель А установка скорости вращения
digitalWrite(dirA, HIGH); - двигатель А направление вращения
analogWrite(pwmB, 255); - тоже, но для Б
digitalWrite(dirB, LOW); - тоже, но для Б
}
Пишешь простой скетч, где поочередно вызываешь только одну из перечисленных подпрограмм и проверяешь, что робот
на команду moveForv() едет именно вперед, а не, например, назад.
- Код: Выделить всё
void loop(){
moveForw();
}
Еще твоя ошибка - операторные скобки, но о них имеет смысл говорить только тогда, когда ты напишешь все перечисленные выше подпрограммы и отладишь их. Тогда твоя программа обретет визуальную легкочитаемую структуру.
Удачи! Пиши.
P.S. ORduino cheat-sheet.pdf - допущена ошибка в MOTORS TEST Example!
=DeaD=, исправьте, plz. Это вводит в ступор новичков!