Машина Arduino Bluetooth не отвечает

Когда я подключаю аккумулятор к сервоприводу L298n, он издает жужжащий звук, а моторы не реагируют на команды из мобильного приложения. Шум прекращается, когда я отключаю контакты in1, in2, in3, in4

Мой проект состоит в том, чтобы сделать руку робота и поместить ее на колеса, а затем управлять всем через Bluetooth с помощью приложения «Arduino Bluetooth Control» от Giumig. Это мои материалы:

  • 3 сервопривода MG996R
  • 2 мотор-редуктора из комплекта 2WD
  • Bluetooth-модуль HC-05
  • Драйвер двигателя L298N
  • Turnigy 2S, 7,4 В, 2200 мАч, литий-полимерный аккумулятор
  • ARDUINO NANO (клон)
  • Vivo 1801 (Android)

Я загрузил этот код:

#include <SoftwareSerial.h> // Программная библиотека TX RX для Bluetooth
#include <Servo.h> // сервобиблиотека
Servo myservo1, myservo2, myservo3; // имя сервопривода
int bluetoothTx = 0; // bluetooth tx на 10-контактный
int bluetoothRx = 1; // bluetooth rx на 11-контактный

int motorOne = 3;
int motorOne2 = 4;
int motorTwo = 5;
int motorTwo2 = 6;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);


//начальный вывод двигателей

char command; 
char Value;

void setup()
{
  myservo1.attach(12); // подключаем сигнальный провод сервопривода к контакту 9
  myservo2.attach(11);
  myservo3.attach(10);
   
  //Настройка последовательного USB-подключения к компьютеру
  Serial.begin(9600);
  //Настройка последовательного соединения Bluetooth с Android
  bluetooth.begin(9600);
}
void loop()
{
  while (bluetooth.available() > 0) {
    Value = Serial.read();
    Serial.println(Value);
  }

  if ( Value == 'F') {
    // Робо-питомец бежит вперед
    digitalWrite(motorOne, HIGH);
    digitalWrite(motorOne2, LOW);
    digitalWrite(motorTwo, HIGH);
    digitalWrite(motorTwo2, LOW);
  } else if (Value == 'B') {
    //Робо-питомец бежит назад
    digitalWrite(motorOne, LOW);
    digitalWrite(motorOne2, HIGH);
    digitalWrite(motorTwo, LOW);
    digitalWrite(motorTwo2, HIGH);
  } else if (Value == 'L') {
    //Робо-питомец поверни налево
    digitalWrite(motorOne, LOW);
    digitalWrite(motorOne2, LOW);
    digitalWrite(motorTwo, HIGH);
    digitalWrite(motorTwo2, LOW);
  } else if (Value == 'R') {
    //Робо-питомец поверни направо
    digitalWrite(motorOne, HIGH);
    digitalWrite(motorOne2, LOW);
    digitalWrite(motorTwo, LOW);
    digitalWrite(motorTwo2, LOW);
  } else if (Value == 'S') {
    //Робо-остановка домашних животных
    digitalWrite(motorOne, LOW);
    digitalWrite(motorOne2, LOW);
    digitalWrite(motorTwo, LOW);
    digitalWrite(motorTwo2, LOW);
  }

  //Чтение с bluetooth и запись на usb serial
  if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos;
    Serial.println(realservo);
    if (realservo >= 1000 && realservo <1180) {
      int servo1 = realservo;
      servo1 = map(servo1, 1000, 1180, 0, 180);
      myservo1.write(servo1);
      Serial.println("Servo 1 ON");
      delay(10);
    }
    if (realservo >= 2000 && realservo <2180) {
      int servo2 = realservo;
      servo2 = map(servo2, 2000, 2180, 0, 180);
      myservo2.write(servo2);
      Serial.println("Servo 2 ON");
      delay(10);
    }
    if (realservo >= 3000 && realservo <3180) {
      int servo3 = realservo;
      servo3 = map(servo3, 3000, 3180, 0, 180);
      myservo3.write(servo3);
      Serial.println("Servo 3 ON");
      delay(10);
    }
    
  }
}

Я использую "Arduino Bluetooth control" от приложений Giumig для управления колесами робота:

https://play.google .com/store/apps/details?id=com.giumig.apps.bluetoothserialmonitor&hl=en&gl=US

Мы будем очень признательны за любую помощь или предложения!

, 👍-1

Обсуждение

напишите простой код, который запускает один двигатель в одном направлении... без bluetooth... без нескольких двигателей, @jsotola


2 ответа


0

Соответствующие части:

int bluetoothTx = 0; // bluetooth tx на 10-контактный
int bluetoothRx = 1; // bluetooth rx на 11-контактный
// ...
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
// ...
void setup()
{
  Serial.begin(9600);
// ...
  if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();

Выводы 0 и 1, которые вы используете для SoftwareSerial, являются контактами, которые Serial использует в UNO для связи через соединение USB. к ПК. Они не могут работать таким образом одновременно. Это одна из причин, почему во многих примерах вы видели, как они работают с выводами 10 и 11.

Вы вряд ли столкнетесь с вариантом использования, когда имеет смысл иметь SoftwareSerial на контактах, уже поддерживающих аппаратную последовательную поддержку... поскольку аппаратная поддержка уже есть и обычно это причина, по которой Повторное использование SoftwareSerial связано с тем, что вы уже используете аппаратное последовательное соединение для некоторых других целей, например, для связи с ПК.

Используйте для SoftwareSerial другие контакты, кроме контактов 0 и 1. Или вы можете избавиться от SoftwareSerial и использовать обычный Serial на контактах 0 и 1 для модуля Bluetooth, но на практике это означает отказ от связи с ПК через USB.< /p>

Похоже, вы также путаете Serial и SoftwareSerial:

while (bluetooth.available() > 0) {  // <--- проверка прогрмаммного последовательного порта
  Value = Serial.read();  // <--- но затем прочитать аппаратный серийный номер?
  Serial.println(Value);
}

SoftwareSerial лучше вообще избегать. Вам будет намного лучше, если вы сможете использовать Arduino с двумя реальными последовательными соединениями, другим USB-последовательным портом и USART или двумя USARTS. Вы также можете использовать некоторые другие варианты последовательного подключения к модулю Bluetooth частично аппаратно, в зависимости от того, какие контакты у вас есть.

,

Спасибо, что нашли время ответить на мой пост. Возможно, я сделал что-то не так, так как это комбинация двух разных скетчей. Я внес изменения в код и разместил контакты Bluetooth TX и RX на 10 и 11. Я протестировал переключение «Serial» и «SoftwareSerial» в первом цикле while. Однако я до сих пор не получаю ответа. Вот ссылка на 2 скетча: https://javainstituteforadvancedtechnology.blogspot.com/2020/12/bluetooth-two-wheel-car-control-via.html https://docs.google.com/document/d/1_xsLIkV4i2YlnQrTLxNZni1Udhk-nQUQ/edit, @user17247218


0

Я решил свою проблему. Я дал SoftwareSerial контакты 10 & 11, и я добавил выводы из enA и enB, что является одной из причин, по которой они не будут работать. Затем я заменил первый цикл while на:

while (bluetooth.available() > 2) {
    Value = bluetooth.read();
    Serial.println(Value);
  }

включение подключения Bluetooth.

Спасибо тем, кто нашел время помочь и ответить на мою проблему

,