// Даём понятное имя пину направления вращения левого мотора #define PIN_ML_DIR 7 // Даём понятное имя пину управления скоростью вращения левого мотора #define PIN_ML_SPEED 6 // Даём понятное имя пину направления вращения правого мотора #define PIN_MR_DIR 4 // Даём понятное имя пину управления скоростью вращения правого мотора #define PIN_MR_SPEED 5 // Настраиваем направление вращения моторов // Если мотор вращается в обратную сторону, меняем false на true constexpr bool ML_INVERT = false; constexpr bool MR_INVERT = false; void setup() { // Настраиваем пины управления моторами в режим выхода pinMode(PIN_ML_DIR, OUTPUT); pinMode(PIN_ML_SPEED, OUTPUT); pinMode(PIN_MR_DIR, OUTPUT); pinMode(PIN_MR_SPEED, OUTPUT); } void loop() { // Едем вперёд со скоростью 50% motorsDrive(126, 126); delay(3000); // Едем вперёд со скоростью 100% motorsDrive(255, 255); delay(3000); // Останавливаемся motorsDrive(0, 0); delay(3000); // Едем назад со скоростью 50% motorsDrive(-126, -126); delay(3000); // Едем назад со скоростью 100% motorsDrive(-255, -255); delay(3000); // Останавливаемся motorsDrive(0, 0); delay(3000); } // Управление движением робота // Указываем скорость левого и правого мотора от 0 до 255, // где 0 — остановка, а 255 — максимальная скорость // Знак задаёт направление вращения: плюс — вперёд, минус — назад void motorsDrive(int ml, int mr) { // Определяем направление вращения левого мотора bool mlDir = ml < 0; // Определяем направление вращения правого мотора bool mrDir = mr < 0; // При необходимости инвертируем направление моторов if (ML_INVERT) mlDir = !mlDir; if (MR_INVERT) mrDir = !mrDir; // Задаём направление вращения моторов digitalWrite(PIN_ML_DIR, mlDir); digitalWrite(PIN_MR_DIR, mrDir); // Задаём скорость вращения моторов analogWrite(PIN_ML_SPEED, abs(ml)); analogWrite(PIN_MR_SPEED, abs(mr)); }