Собрал машинку четырехколесную. Подключил блютус модуль и через приложение на телефоне хотел запустить. Пищит но не едет. Подскажите в чем причина

Mission failed(C)

3 лайка

Коды опять выложены неверно.

Как закончите с кодами - приступайте к черчению (или как там правильнее - рисованию?) схемы

что такое обратный апостроф?

Это \?

парень, ну ты реально тупой или как?
Открой свою же собственную декабрьскую тему, там все обьяснили и показали.

1 лайк

Это - гитарист из ГанзNРоузис

1 лайк

просто апостроф напечатай обратный

вот он - `

и на картинке в декабрьской теме он тоже есть…

#include <SoftwareSerial.h>
#include "motor.h"
#include "move_case.h"
//Создаем последовательный порт на пинах 13-чтение и 2-передача.
SoftwareSerial BTSerial(10, 11); // RX, TX
// Переменная для приема данных по Bluetooth.
char bt_input;
// Хранит время последнего нажатия кнопки.
unsigned long _time;
//=================================//
//== Функция инициализации
void setup()
{
  // Переменные – номера контактов (пинов) Arduino.
  // Для левых и правых моторов машинки.
  setup_motor_system(2, 3, 4, 5);
  _stop(); //Двигатели остановлены.
  // Устанавливаем скорость передачи данных для НС-05 (Bluetooth-модуль).
  BTSerial.begin(9600);
  // Переключаем A0 в двоичный режим работы, на передачу.
  // если вы его еще не отключили
  pinMode(14, OUTPUT);
  // Устанавливаем скорость передачи данных по кабелю.
  // Порт компьютера
  //Serial.begin(9600);
  _time = micros();
}
// Основная программа.
void loop()
{
  if (BTSerial.available())
  {
    // Читаем команду и заносим ее в переменную. char преобразует
    // код символа команды в символ.
    bt_input = (char)BTSerial.read();
    // Отправляем команду в порт, чтобы можно было
    // их проверить в "Мониторе порта".
    //Serial.println(bt_input);
    //Вызов функции выбора действия по команде
    move_case(bt_input);
    _time = micros();
  }
  if ((micros() - _time) > _move_time)
  {
    _stop();
  }
  if ((micros() - _time) >= 500)
  {
    _time = micros();
    move_case(bt_input);
  }
}



int motor_L1, motor_L2;
int motor_R1, motor_R2;
//===============================================
// Функция инициализации управления моторами.
void setup_motor_system(int L1, int  L2, int  R1, int R2)
{
  // Заносятся в переменные номера контактов (пинов) Arduino.
  motor_L1 = L1; motor_L2 = L2;
  // Для левых и правых моторов робота.
  motor_R1 = R1; motor_R2 = R2;
  // Переводятся указанные порты в состояние вывода данных.
  pinMode(motor_L1, OUTPUT);
  pinMode(motor_L2, OUTPUT);
  pinMode(motor_R1, OUTPUT);
  pinMode(motor_R2, OUTPUT);
}
//===============================================
// движение вперед.
void forward()
{
  // Если двигатель будет работать не в ту сторону,
  // поменять на нем контакты местами.
  digitalWrite(motor_L1, HIGH);
  digitalWrite(motor_L2, LOW);
  digitalWrite(motor_R1, HIGH);
  digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот налево с блокировкой левых колес.
void forward_left()
{
  // блокировка вращения левых колес.
  digitalWrite(motor_L1, LOW);
  digitalWrite(motor_L2, LOW);
  // правые колеса вращаются.
  digitalWrite(motor_R1, HIGH);
  digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот направо с блокировкой правых колес.
void forward_right()
{
  // левые колеса вращаются.
  digitalWrite(motor_L1, HIGH);
  digitalWrite(motor_L2, LOW);
  // блокировка вращения правых колес.
  digitalWrite(motor_R1, LOW);
  digitalWrite(motor_R2, LOW);
}
// Поворот налево на месте.
void left()
{
  // левые колеса вращаются назад.
  digitalWrite(motor_L1, LOW);
  digitalWrite(motor_L2, HIGH);
  // правые колеса вращаются вперед.
  digitalWrite(motor_R1, HIGH);
  digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот направо на месте.
void right()
{
  // левые колеса вращаются вперед.
  digitalWrite(motor_L1, HIGH);
  digitalWrite(motor_L2, LOW);
  // правые колеса вращаются назад.
  digitalWrite(motor_R1, LOW);
  digitalWrite(motor_R2, HIGH);
}


// Включаем движение назад.
void backward()
{
  // Смена направления вращения двигателей.
  digitalWrite(motor_L2, HIGH);
  digitalWrite(motor_L1, LOW);
  digitalWrite(motor_R2, HIGH);
  digitalWrite(motor_R1, LOW);
}
//===============================================
// Включаем движение назад.
void backward_left()
{
  // Смена направления вращения двигателей.
  digitalWrite(motor_L2, LOW);
  digitalWrite(motor_L1, HIGH);
  digitalWrite(motor_R2, HIGH);
  digitalWrite(motor_R1, LOW);
}
//===============================================
// Включаем движение назад.
void backward_right()
{
  // Смена направления вращения двигателей.
  digitalWrite(motor_L2, HIGH);
  digitalWrite(motor_L1, LOW);
  digitalWrite(motor_R2, LOW);
  digitalWrite(motor_R1, HIGH);
}
//===============================================


void _stop()
{
  // Блокировка всех колес.
  digitalWrite(motor_L2, LOW);
  digitalWrite(motor_L1, LOW);
  digitalWrite(motor_R2, LOW);
  digitalWrite(motor_R1, LOW);
}

unsigned long  _move_time;
// == Выбор действий
void move_case(char bt_input)
{
  switch (bt_input) {
    // Вперед
    case 'F':
      forward();
      break;
    // Назад
    case 'B':
      backward();
      break;
    // Влево
    case 'L':
      left();
      break;
    // Вправо
    case 'R':
      right();
      break;
    // Прямо и влево
    case 'G':
      forward_left();
      break;
    // Прямо и вправо
    case 'I':
      forward_right();
      break;
    // Назад и влево
    case 'H':
      backward_left();
      break;
    // Назад и вправо
    case 'J':
      backward_right();
      break;
    // Стоп
    case 'S':
      _stop();
      break;
    // Скорость 0%
    case '0':
      _move_time = 0;
      break;
    // Скорость 10%
    case '1':
      _move_time = 50;
      break;
    // Скорость 20%
    case '2':
      _move_time = 100;
      break;
    // Скорость 30%
    case '3':
      _move_time = 150;
      break;
    // Скорость 40%
    case '4':
      _move_time = 200;
      break;
    // Скорость 50%
    case '5':
      _move_time = 250;
      break;
    // Скорость 60%
    case '6':
      _move_time = 300;
      break;
    // Скорость 70%
    case '7':
      _move_time = 350;
      break;
      // Скорость 80%
      _move_time = 400;
      break;
    // Скорость 90%
    case '9':
      _move_time = 450;
      break;
    // Скорость 100%
    case 'q':
      _move_time = 500;
      break;
    case 'X':
      //switch_rejim = 1;
      break;
    case 'x':
      //switch_rejim = 0;
      break;
    case 'D':
      _stop(); //switch_rejim = 0;
      break;
  }
}

Теперь посмотрите пожалуйста код

По коду у меня пока один вопрос.
Вот это зачем?

Не нашел, чтобы этот пин использовался в программе где-либо еще.

По сути - для ответа на вопрос про моторы еще нужна схема и описание моторов.

Наводящий вопрос - моторы питаются прямо от пинов ардуино?

Если ардуина еще “пищит”, то нет. Иначе уже дым бы пустила

ну чего гадать, пусть ТС отвечает

Моторы только через драйвер можно подключать к ардуино.

Вам надо сначала проверить ходовую часть на движения вперёд, назад, вправо, влево, на разных скоростях-шим заполнении. Это стандарт в ходунах и ездунах. А уже потом манстрячить дистанционное управление.

Схема где? И описание моторов?

На схеме не забудьте указать все элементы - моторы, драйвера, блоки питания, а также все соединения с указанием пинов.

у него нет ШИМ

Тогда ещё проще. Пишите скетч на 4 движения, секунды по 2 и будет ясно с ходовой.
…хотя если не едет даже с колёсами на воздухе и без шим, но пищит, то странно :slight_smile: