Bluetooth на arduino

Купил манипулятор на сервоприводах - от пульта он работал нормально, но потом подлючил bluetooth модуль и сервоприводы начали попарно дергаться:
управляю 1 дрегается 2;
управляю 2 дрегается 1;
управляю 3 дрегается 4;
управляю 4 дрегается 3;
Пытался решить проблему, как мог - решил закоментировать строчку
Serial.begin(9600) которая отвечает за вывод на экран сигналов при управлении со смартфона - нажимаешь на кнопки, а приходят буквы.
Все перестало работать - понял, что без нее ничего работать не будет, раскоментировал строку, прошил заново и ничего не рабртает - bluetooth - выдает знак вопроса - ? вместо букв.
Думал, что bluetooth модуль навернулся - купил новый - не помогло.
Испытал модули на другой arduino uno - не помогло.
Обнавил Arduino IDE 2.3.7 до 2.3.10 не помогло.
Удалил Arduino IDE 2.3.10 и установил заново, тоже самое сделал с драйвером CP210 - ничего не помогло, как не работало так и не работает.
Может у кого была такая проблема - может можете подсказать?!

Для начала могу подсказать вот это

Спасибо за расплывчивый ответ, но - опять же проблема не дает мне покоя больше месяца - все работали и в момент перестало - что мне с этим делать

Пожалуйста, но стоило бы пройти по ссылке. Ибо там есть такой пункт

И что? Как это должно нас взволновать?

Возможно, стоит откатить к моменту, когда все работало. Очевидно же, что именно ваши действия привели к проблеме

Тут могу предположить, что скорости интерфейсов не совпадают. В скетче задана скорость 9600 - Serial.begin(9600), такая же скорость должна быть установлена в том мониторе порта, которым вы пользуетесь.

Это все, что можно сказать по вашей проблеме и ее описанию

Хорошо, а как это сделать то?!

Без понятия…

v258 мне кажется у вас талант помогать и троллить одновременно…

Вам кажется. А еще вам кажется, что я вижу вашу проблему так же, как и вы. Это не так. Я не вижу - ни чем вы пользуетесь, ни что вы делаете, ни что у вас там не получается. Для меня это все - тайна за семью печатями. Для остальных здесь - тоже.

вам кажется что у меня проблема)))

а что касается AEKravcov2001 так ему надо обязательно пройти курс что бы хотя бы понимать как менять скорость порта, и как вставлять код…

Бабос, мля, какого хрена ты лезешь во взрослые разговоры!!! :smiling_face_with_horns:

ну вы хоть ники сравните, а еще меня лентяем называли…

собираю доки к вашему личному делу, внес пометку что это вы главный лентяй, еще и других в этом обвиняете, все я убежал, не буду мешать)))

Ты лентяй и есть. А я есть старый подслеповатый человек. Грешно над этим смеяться…

у меня у самого зрение плывет, но все таки лентяй вы…

Беги уже, раз пообещал…

Так, что делать кеп - скорость передачи данных стояла 9600 в обоих строчках с самого начала, и все работало, а потом накрылось. ЧТО МНЕ С ЭТИМ ДЕЛАТЬ?!

А вы искали сами советы - поисковиком?

А то я взял Ваш текст и попросил гугл в режиме ИИ.

Главная причина, почему сейчас приходят знаки вопроса (?) — это рассинхронизация скорости передачи данных (Baud Rate) или конфликт портов.

Сам Bluetooth-модуль исправен, как и ваша Arduino. Проблема кроется в аппаратном конфликте или настройках прошивки. Давайте разберем обе проблемы по очереди.


Часть 1. Почему появились знаки вопроса ? (Текущая проблема)

Знак вопроса в Serial-мониторе означает, что плата получает байты, но не может их расшифровать. Это происходит в двух случаях:

  1. Несовпадение скорости (Baud Rate): В коде написано Serial.begin(9600);, а сам Bluetooth-модуль (особенно если он новый) с завода настроен на другую скорость (например, 38400 или 115200). Из-за этого символы превращаются в мусор.
  2. Конфликт пинов TX/RX: Если ваш Bluetooth-модуль подключен к пинам 0 (RX) и 1 (TX) на Arduino Uno, то он делит этот канал с USB-кабелем.
    • Важно: Когда вы прошиваете плату, Bluetooth-модуль нужно обязательно физически отключать от пинов 0 и 1. Иначе прошивка либо не зальется, либо зальется с ошибкой, а в порт будет сыпаться мусор.

:hammer_and_wrench: Как исправить:

  • Шаг 1: Отключите провода RX и TX модуля Bluetooth от Arduino.
  • Шаг 2: Прошейте плату вашим кодом еще раз (убедитесь, что в коде и в нижнем правом углу Serial-монитора выставлена одинаковая скорость, например, 9600).
  • Шаг 3: Подключите Bluetooth обратно. Если не помогло, попробуйте изменить в коде скорость на Serial.begin(38400); или Serial.begin(115200); (и в мониторе порта тоже), так как новые модули часто идут с такой скоростью по умолчанию.

Часть 2. Почему сервоприводы дергались попарно? (Исходная проблема)

Когда вы исправите чтение букв, вернется старая проблема с дерганьем. Вот почему она возникает:

  • Проблема 1: Просадка по питанию (Самая частая причина). Сервоприводы при движении потребляют много тока (до 1–2 Ампер в пике). Bluetooth-модуль очень чувствителен к напряжению. Когда вы начинаете управлять сервой 1, она резко забирает ток, напряжение на плате падает, Bluetooth-модуль на долю секунды теряет связь, отправляет случайный мусорный сигнал в Arduino, и плата воспринимает его как команду для сервы 2.
  • Проблема 2: Наводки и общая земля. Если питание сервоприводов и Bluetooth идет от одного источника без конденсаторов, мощные моторы создают электромагнитные шумы в проводах данных.
  • Проблема 3: Ошибка в логике кода (Скетче). Если вы читаете символы через Serial.read() без проверки окончания строки, буфер может сдвигаться. Например, вместо команды A (для первой сервы) из-за задержки Bluetooth считывается следующий байт B (для второй сервы).

:hammer_and_wrench: Как это исправить в будущем:

  1. Разделите питание: Никогда не питайте сервоприводы напрямую от пина 5V платы Arduino. Для серв нужен отдельный источник питания (например, блок питания на 5V/3A или аккумулятор), но обязательно соедините минус (GND) внешнего питания с пином GND на Arduino.
  2. Используйте SoftwareSerial: Перенесите Bluetooth-модуль с пинов 0 и 1 на любые другие (например, 10 и 11), используя библиотеку SoftwareSerial. Это освободит аппаратный USB-порт для отладки и уберет конфликты.

Давайте вернем систему к жизни. Вы можете прикрепить сюда ваш код (скетч)? Я посмотрю, как там настроен прием символов и к каким пинам подключен Bluetooth, чтобы дать точную схему исправления.

для начала внимательно перечитать все что вам писали ранее, и выполнить все в точности…

а когда уже начнете следовать инструкциям, можно потом подсказать что то такое - в конце loop() у вас стоит switch(val2), и из-за того, что там оказался мусор (-1), он случайно попадает в кейс для другой буквы. Отсюда и эффект: жмёте на 1 — дергается 2. при условии что помощь реально будет полезна…

Проще. Я своим сообщением разбанил его на гугле.