Bluetooth на arduino

@BABOS если первый порт не получил данных, то всегда ли второй порт получил? А если serial и serial1 это один и тот же порт?

Бабос вроде верный вариант дал. Он пойти должен и без блютуз модуля. Выдерните его, плату с мк питайте от пк, сервы от аккумов, минус общий и через монитор порта буквы-команды засылайте. Если не работает дело не в скетче.

а знаки вопросов пропали ?

если нет тогда

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("Arduino ready!");
}

void loop() {
  if (Serial.available() > 0) {
    char c = Serial.read();
    Serial.print("Received: ");
    Serial.println(c);
    Serial.print("ASCII code: ");
    Serial.println((int)c);
  }
}

если не работает попробуйте разные скорости 9600, 19200, 38400, 57600, 115200

не получит потому что это один и тот же порт))) а существует ли вообще serial1 ?

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

SoftwareSerial BT(1,0); не 1 0 а какие были и никогда больше не переделывайте чужие программы!)))

Спасибо за совет, но знаки вопроса не пропали - разные скорости передачи данных пробовал - не помогло

Код для подключения arduino по bluetooth взял из этого видео - https://dzen.ru/video/watch/5f5680233b3fcc06748f69a2?utm_referrer=dzen.ru
Но пришлось его слегка адаптировать поскольку для подключения сервоприводов используется Keyestudio TB6612FNG Плата расширения сервопривода двигателя/щиток сервопривода с модулями
а на ней под bluetooth модуль выделены именно пины 0 и 1 - другие я использовать НЕ МОГУ

Когда я им управляю напрямую от джойстиков по этому коду - проблем нет

#include <Servo.h>

Servo Xr;

Servo Yr;

Servo Xl;

Servo Yl;

int xr, yr, xl, yl;




void setup() {

  Xr.attach(8);

  Yr.attach(9);

  Xl.attach(6);

  Yl.attach(7);   

}




void loop() {

  xr=map(analogRead(A0), 0, 1023, 0, 180);

  yr=map(analogRead(A1), 0, 1023, 180, 0);

  xl=map(analogRead(A3), 0, 1023, 0, 180);

  yl=map(analogRead(A4), 0, 1023, 180, 0);

  Xr.write(xr);

  Yr.write(yr);

  Xl.write(xl);

  Yl.write(yl);

  }

Хочешь видео, как он работал от bluetooth, чтобы ты убедился, что она работал, только скажи куда прислать

Можете посмотреть в стороннем мониторе порта в режиме HEX, что скрывается под знаком “?”. Ардуиновский монитор выводит любые непечатаемые числа от 0 до 20 этим символом. Точно один и тот же байт идет на вывод? И тогда поймете в скорости порта или ещё в чём причина. При одинаковой команде и байты в HEX формате должны совпадать.

Во-первых, можете. Но нужно головой думать, а не тупо по картинке тыкать. Возможно, потом получится. А во-вторых, здесь уже много раз было сказано, что два интерфейса вместе на одних пинах работать НЕ СМОГУТ. Вывод? Не используйте Serial, что ж тут сложного?

Не, надо готовый скетч ему…и схему, в ней ещё больше ни бум, бум…он.

@lilik, ну ты ж понимаешь, что здесь это так не работает. Тут только Бабос кодами/схемами фонтанирует, но ты же знаешь, где он их берет ))

А ничего, что if при аналоговом вводе у вас делает одно действие, а блюпуп другое? Один дал команду двинуться, а другой остановил?

Да. ТСу остаётся к ИИ на поклон идти…с комментами к каждой строке :slight_smile:

Попробуйте прочитать первые два предложения по ссылке #71( бл.., ещё и уговаривать надо) - поможет.

Похоже такая лялька у него…и должна быть книжка со скетчами :slight_smile:

жонглирую, и только кодами, это не одно и тоже!)))

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

Да, у него пины явно товось.

Чего товоль - типа померли или нет?!

Да купил такой - решил купить - попробовать свои силы, на нашла коса на камень

20260627_142339

Вы @BABOS цвай.

Аналоговое управление можно совместить с Bluetooth, чтобы манипулятор реагировал и на потенциометры, и на команды с телефона.

Чтобы они не конфликтовали друг с другом (ведь потенциометр постоянно шлет свое положение и будет мгновенно перезаписывать команду из Bluetooth), в код добавлена зона нечувствительности (deadzone). Робот повернется по потенциометру только в том случае, если вы физически сдвинете ручку потенциометра более чем на ±3 градуса от его текущего положения.

Совмещенный скетч (Bluetooth + Потенциометры)

#include <Servo.h>
#include <SoftwareSerial.h>

// Создаем объекты для четырех сервоприводов
Servo servoBase;      
Servo servoShoulder;  
Servo servoElbow;     
Servo servoGripper;   

// Пины сервоприводов
const int pinServoBase = 9;
const int pinServoShoulder = 10;
const int pinServoElbow = 11;
const int pinServoGripper = 6;

// Пины потенциометров
const int pinPotBase = A0;
const int pinPotShoulder = A1;
const int pinPotElbow = A2;
const int pinPotGripper = A3;

// Настройка Bluetooth: RX - пин 2, TX - пин 3
SoftwareSerial bluetooth(2, 3); 

// Переменные для хранения текущих углов
int currentBase = 90;
int currentShoulder = 90;
int currentElbow = 90;
int currentGripper = 90;

// Порог изменения угла потенциометра (чтобы избежать конфликта с Bluetooth)
const int deadzone = 3; 

void setup() {
  servoBase.attach(pinServoBase);
  servoShoulder.attach(pinServoShoulder);
  servoElbow.attach(pinServoElbow);
  servoGripper.attach(pinServoGripper);
  
  Serial.begin(9600);
  bluetooth.begin(9600);
  
  // Установка стартовых позиций
  servoBase.write(currentBase);
  servoShoulder.write(currentShoulder);
  servoElbow.write(currentElbow);
  servoGripper.write(currentGripper);
}

void loop() {
  // 1. ОПРОС ПОТЕНЦИОМЕТРОВ
  int potBaseAngle = map(analogRead(pinPotBase), 0, 1023, 0, 180);
  int potShoulderAngle = map(analogRead(pinPotShoulder), 0, 1023, 0, 180);
  int potElbowAngle = map(analogRead(pinPotElbow), 0, 1023, 0, 180);
  int potGripperAngle = map(analogRead(pinPotGripper), 0, 1023, 0, 180);

  // Проверяем, сдвинулся ли потенциометр сильно (ручное управление)
  if (abs(potBaseAngle - currentBase) > deadzone) {
    currentBase = potBaseAngle;
    servoBase.write(currentBase);
  }
  if (abs(potShoulderAngle - currentShoulder) > deadzone) {
    currentShoulder = potShoulderAngle;
    servoShoulder.write(currentShoulder);
  }
  if (abs(potElbowAngle - currentElbow) > deadzone) {
    currentElbow = potElbowAngle;
    servoElbow.write(currentElbow);
  }
  if (abs(potGripperAngle - currentGripper) > deadzone) {
    currentGripper = potGripperAngle;
    servoGripper.write(currentGripper);
  }

  // 2. ОБРАБОТКА КОМАНД BLUETOOTH
  if (bluetooth.available() > 0) {
    char key = bluetooth.read(); 
    
    if (key == 'B' || key == 'S' || key == 'E' || key == 'G') {
      int angle = bluetooth.parseInt(); 
      angle = constrain(angle, 0, 180);
      
      switch (key) {
        case 'B':
          currentBase = angle;
          servoBase.write(currentBase);
          break;
        case 'S':
          currentShoulder = angle;
          servoShoulder.write(currentShoulder);
          break;
        case 'E':
          currentElbow = angle;
          servoElbow.write(currentElbow);
          break;
        case 'G':
          currentGripper = angle;
          servoGripper.write(currentGripper);
          break;
      }
    }
  }
  
  delay(15); // Небольшая задержка для стабильности аналоговых входов
}

Если у вас возникнут сложности с одновременной работой, дайте знать:

  • Успели ли вы проверить схему в железе?
  • Хотите ли вы добавить переключатель режимов (физическую кнопку), чтобы жестко выбирать между «Только потенциометры» и «Только Bluetooth»?

С Вас @BABOS -у 2 косаря.

Diskless вы явно гений который шифруется написанием кода от ии))) но что бы понять вашу гениальность ему все равно надо пройти курс… а он пока что пиарит только не лучший набор, я бы взял https://roboshop.spb.ru/kits/diy-nabory/mearm-black-acrylic и https://roboshop.spb.ru/modules/moduli-shim/pca9685 + серво и ардуино…

и 2к будет не раньше чем вы мне 10к заплатите за что нить… что бы платить деньги, сначала надо их получить!