Я могу отправлять на 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 и читать их выходные данные, очень важно заставить это работать.
@Nephilim, 👍0
Обсуждение3 ответа
Если SoftwareSerial не работает, просто не используйте его.
В любом случае вам не следует его использовать.
У вас Mega с 4 UART. Вы используете пару контактов UART, но при этом используете SoftwareSerial.
Нет.
вместо этого для связи используйте объект SerialX
(где X — номер TX и RX для контактов).
SoftwareSerial предназначен только для тех случаев, когда у вас недостаточно аппаратных UART, а их много.
Serial3 не работал ни в одном направлении, поэтому я в первую очередь переключился на программный последовательный порт., @Nephilim
@Juraj Я переделывал все это несколько раз, теперь оно подключено к последовательному порту с TX->1 и RX->0 . Та же проблема повсюду., @Nephilim
Возможно, встроенный UART (аппаратный последовательный порт), назначенный на те же контакты, мешает работе SoftwareSerial? Если вы действительно хотите использовать SoftwareSerial, попробуйте его на паре контактов, к которым не подключен аппаратный UART.
И/или попробуйте SoftwareSerial (опять же, на паре контактов без UART) для подключения к вашему ПК (после загрузки; вы не можете загружать с его помощью) и используйте Serial1 для подключения к вашему устройству. Это не рекомендуемый и не самый простой способ, но он может помочь устранить возникшие проблемы.
В 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
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- Bluetooth-модуль HC-05 не принимает AT-команды
- Последовательная связь arduino mega и D1 Wemos Mini
- Использование software serial на Arduino Mega
- Проблемы с подключением Bluetooth OBD2 ELM327
- SoftwareSerial читается до тех пор, пока не станет пустым, работает только с задержкой
- Использование Arduino Mega с несколькими модулями HC05 в качестве ведущих, связь с несколькими модулями HC05 в качестве подчиненных, каждый из которых подключен к отдельному Arduino.
Вы тестировали HM10 с помощью адаптера USB-Serial?, @MrFixIt87
Что ты имеешь в виду? Arduino подключен к ноутбуку, и я читаю последовательный монитор Arduino IDE. У меня нет каких-либо специальных кабелей, кроме того, который идет в комплекте (тот, который вводит код в плату), @Nephilim
что такое while(1)? пусть цикл (), @Juraj
С какой стати вы используете серийное программное обеспечение????, @Majenko
Как вы воспримете такой тон и не предложите альтернативу? @Маженко, @Nephilim
Потому что мне ужасно надоело видеть, как люди это делают. Мне бы хотелось знать, *почему* они это делают., @Majenko
Что ты ожидаешь от меня, чтобы дать тебе прямо здесь? Математический анализ того, почему серийный номер оборудования не работал в моем буквальном первом проекте на Arduino, но программное обеспечение, по крайней мере, немного подтолкнуло мой прогресс? Не знаю, один работал немного, другой не работал вообще., @Nephilim
Если серийный номер оборудования не работает, значит, вы делаете что-то в корне неправильное., @Majenko
Если серийный номер оборудования не работает, значит, у вас проблема либо с вашим оборудованием, либо с вашим кодом. Если у вас возникла проблема, правильный подход — устранить ее: выяснить, что не так, и исправить это. При необходимости вы можете обратиться за помощью сюда. Если вы просто сдадитесь и перейдете на серийное программное обеспечение, то вместо решения первоначальной проблемы вы просто создадите _еще одну проблему_., @Edgar Bonet