Всем доброго времени суток.
Пытаемся с сыном разобраться с программой управления моторчиками.
Часть программки из примера амперки, она работает без нареканий.
Еще одна часть селектор скоростей светодиоды зажигает индицируя изменение передачи,
а вот моторчики скорость не меняют и программа работает только в самом нижнем switch..case/
вращая моторы на максимальной скорости.
// Пины управления скоростью и направлением мотора
constexpr auto pinM1Speed = 9;
constexpr auto pinM1Direction = A1;
constexpr auto pinM2Speed = 10;
constexpr auto pinM2Direction = A0;
int pins[] = {pinM1Speed, pinM1Direction, pinM2Speed, pinM2Direction};
int j;
int p;
char incoming_symbol; // переменная для данных Bluetooth
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT); //первая передача
pinMode(12, OUTPUT); //вторая передача
pinMode(11, OUTPUT); //третья передача
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
// Настраиваем все пины управление моторами в режим выхода
for (int i = 0; i < 4; i++) {
pinMode(pins[i], OUTPUT);
}
}
void loop()
{
if (Serial.available() > 0) { // если порт доступен
incoming_symbol = Serial.read(); // считываем с порта данные
if (incoming_symbol == '1') {
digitalWrite(13, HIGH); //зажигаем светодиод индицирующий первую передачу
digitalWrite(12, LOW);
digitalWrite(11, LOW);
switch(incoming_symbol) {
case '0': // если приходит "0" стоп
motorsDrive(0, 0); //оба мотора стоп
break;
case '6': // если приходит "6" движимся в право
motorsDrive(85, 0); // правый вперед
delay(100);
break;
case '8': // если приходит "8" движимся в лево
motorsDrive(0, 85); // левый вперед
delay(100);
break;
case '5': // если приходит "5" то движимся вперед
motorsDrive(85, 85); // оба вперед
delay(100);
break;
case '7': // если приходит "7" движимся назад
motorsDrive(-85, -85); // левый вперед
delay(100);
break;
}
}
if (incoming_symbol == '2') {
digitalWrite(13, LOW);
digitalWrite(12, HIGH);//зажигаем светодиод индицирующий вторую передачу
digitalWrite(11, LOW);
switch(incoming_symbol) {
case '0': // если приходит "0" стоп
motorsDrive(0, 0); //оба мотора стоп
break;
case '6': // если приходит "6" движимся в право
motorsDrive(170, 0); // правый вперед
delay(100);
break;
case '8': // если приходит "8" движимся в лево
motorsDrive(0, 170); // левый вперед
delay(100);
break;
case '5': // если приходит "5" то движимся вперед
motorsDrive(170, 170); // оба вперед
delay(100);
break;
case '7': // если приходит "7" движимся назад
motorsDrive(-170, -170); // левый вперед
delay(100);
break;
}
}
if (incoming_symbol == '3') {
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);//зажигаем светодиод индицирующий третью передачу
}
switch(incoming_symbol) {
case '0': // если приходит "0" стоп
motorsDrive(0, 0); //оба мотора стоп
break;
case '6': // если приходит "6" движимся в право
motorsDrive(255, 0); // правый вперед
delay(100);
break;
case '8': // если приходит "8" движимся в лево
motorsDrive(0, 255); // левый вперед
delay(100);
break;
case '5': // если приходит "5" то движимся вперед
motorsDrive(255, 255); // оба вперед
delay(100);
Serial.println(255);
break;
case '7': // если приходит "7" движимся назад
motorsDrive(-255, -255); // левый вперед
delay(100);
break;
}
}
}
// Функция управления моторами
void motorsDrive(int M1Speed, int M2Speed) {
if (M1Speed > 0) {
digitalWrite(pinM1Direction, HIGH);
} else {
digitalWrite(pinM1Direction, LOW);
}
if (M2Speed > 0) {
digitalWrite(pinM2Direction, HIGH);
} else {
digitalWrite(pinM2Direction, LOW);
}
analogWrite(pinM1Speed, abs(M1Speed));
analogWrite(pinM2Speed, abs(M2Speed));
}