Я могу отправлять на software serial, но не прочитать?

Я долго ломал над этим голову.

Как и многие до меня, я пытаюсь отправлять и получать данные с модуля Bluetooth HM-10, Arduino Mega Adk и приложения под названием BLE Scanner. Я понял, что с получением все в порядке. Все, что я записываю в последовательный монитор, отображается в приложении. Все, что я записываю в серийный номер программного обеспечения, появляется. Однако я не понял, как читать серийный номер программного обеспечения. Доступная функция никогда не срабатывает, и всегда распечатка серийного номера программного обеспечения всегда имеет значение -1

Это мое соединение

Приложение также поддерживает отправку данных через Bluetooth. Однако, используя:

    #include <SoftwareSerial.h>
SoftwareSerial blueSerial(14, 15); //RX, TX
  blueSerial.begin(9600);
  Serial.begin(9600);
while (1)
  {
    blueSerial.listen();
    if (Serial.available()) {
      Serial.println("Writing");
      blueSerial.write(Serial.read());
      Serial.println(Serial.read());
      Serial.println(blueSerial.available());
    }
    if (blueSerial.available()) {
      Serial.println("Blueserial writing");
      Serial.write(blueSerial.read());
    }
}

Функция прослушивания используется в чистом отчаянии.

Как это исправить? Это должно работать, верно? Поскольку я хочу в какое-то время отправлять AT-команды модулям Bluetooth и читать их выходные данные, очень важно заставить это работать.

, 👍0

Обсуждение

Вы тестировали HM10 с помощью адаптера USB-Serial?, @MrFixIt87

Что ты имеешь в виду? Arduino подключен к ноутбуку, и я читаю последовательный монитор Arduino IDE. У меня нет каких-либо специальных кабелей, кроме того, который идет в комплекте (тот, который вводит код в плату), @Nephilim

что такое while(1)? пусть цикл (), @Juraj

С какой стати вы используете серийное программное обеспечение????, @Majenko

Как вы воспримете такой тон и не предложите альтернативу? @Маженко, @Nephilim

Потому что мне ужасно надоело видеть, как люди это делают. Мне бы хотелось знать, *почему* они это делают., @Majenko

Что ты ожидаешь от меня, чтобы дать тебе прямо здесь? Математический анализ того, почему серийный номер оборудования не работал в моем буквальном первом проекте на Arduino, но программное обеспечение, по крайней мере, немного подтолкнуло мой прогресс? Не знаю, один работал немного, другой не работал вообще., @Nephilim

Если серийный номер оборудования не работает, значит, вы делаете что-то в корне неправильное., @Majenko

Если серийный номер оборудования не работает, значит, у вас проблема либо с вашим оборудованием, либо с вашим кодом. Если у вас возникла проблема, правильный подход — устранить ее: выяснить, что не так, и исправить это. При необходимости вы можете обратиться за помощью сюда. Если вы просто сдадитесь и перейдете на серийное программное обеспечение, то вместо решения первоначальной проблемы вы просто создадите _еще одну проблему_., @Edgar Bonet


3 ответа


0

Если SoftwareSerial не работает, просто не используйте его.

В любом случае вам не следует его использовать.

У вас Mega с 4 UART. Вы используете пару контактов UART, но при этом используете SoftwareSerial.

Нет.

вместо этого для связи используйте объект SerialX (где X — номер TX и RX для контактов).

SoftwareSerial предназначен только для тех случаев, когда у вас недостаточно аппаратных UART, а их много.

,

Serial3 не работал ни в одном направлении, поэтому я в первую очередь переключился на программный последовательный порт., @Nephilim

@Juraj Я переделывал все это несколько раз, теперь оно подключено к последовательному порту с TX->1 и RX->0 . Та же проблема повсюду., @Nephilim


1

Возможно, встроенный UART (аппаратный последовательный порт), назначенный на те же контакты, мешает работе SoftwareSerial? Если вы действительно хотите использовать SoftwareSerial, попробуйте его на паре контактов, к которым не подключен аппаратный UART.

И/или попробуйте SoftwareSerial (опять же, на паре контактов без UART) для подключения к вашему ПК (после загрузки; вы не можете загружать с его помощью) и используйте Serial1 для подключения к вашему устройству. Это не рекомендуемый и не самый простой способ, но он может помочь устранить возникшие проблемы.

,

1

В Mega вам не нужно использовать SoftwareSerial. У Меги 4 сериала. Подключите модуль к RX3/TX3, как у Fritzing в вашем вопросе, и используйте Serial3 в эскизе.

void setup() {
  Serial.begin(9600);
  Serial3.begin(8600);
}

void loop() {

  while (Serial.available()) {
    Serial3.write(Serial.read());
  }
  while (Serial3.available()) {
    Serial.write(Serial3.read());
  }
}
,

Я должен подтвердить, что то, что работало в UNO через SoftwareSerial, не работало в Mega... но вместо этого сработало переключение на Serial2., @Uli

@Uli, на Mega не все контакты поддерживают SoftwareSerial, @Juraj