0 голосов
Всем доброго времени суток.

Пытаемся с сыном разобраться с программой управления моторчиками.

Часть программки из примера амперки, она работает без нареканий.

Еще одна часть селектор скоростей светодиоды зажигает индицируя изменение передачи,

а вот моторчики скорость не меняют и программа работает только в самом нижнем 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));

}
(4 баллов) 1 3
Пожалуйста, вставьте код подобающе.

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...