Проблема с Software Serial: нет ответа
Я использую плату Arduino Uno с IDE 1.6.7.
Я попытался реализовать измененную версию базового примера (пример SoftwareSerial
) из библиотеки Software Serial. Код прилагается.
Он должен мигать и печатать сообщение на последовательном мониторе. Но я ничего не получаю.
На самом деле, я тоже пробовал пример как есть. Это тоже не сработало.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9); // прием, передача
void setup() {
pinMode(13,OUTPUT);
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
Serial.println("Goodnight moon!");
// устанавливаем скорость передачи данных для порта SoftwareSerial
mySerial.begin(9600);
delay(1000);
}
void loop() { // повторяем снова и снова
mySerial.println("hell");
if (mySerial.available() > 0) {
digitalWrite(13,HIGH);
Serial.write("working..");
delay(3000);
digitalWrite(13,LOW);
delay(2000);
}
}
@rohit, 👍1
Обсуждение3 ответа
if(mySerial.available()>0)
mySerial.available()
возвращает количество байтов, доступных в буфере последовательного приема. Если вы не отправляете команды через последовательный порт на контактах 8 и 9, это останется 0, и вы никогда не введете оператор if.
Кроме того, здесь у вас есть два объявления для серийного номера:
Serial.begin()
инициализировал встроенный USB-модуль UART. Здесь вы сможете отправлять/получать команды с помощью такой программы, как Putty.SoftwareSerial mySerial(8, 9); // прием,
mySerial.begin()
инициализирует последовательную связь с контактами 8 и 9 на плате Arduino. Это было бы, если бы вы хотели отправлять/получать команды с цифровым вводом-выводом вместо или в дополнение к USB-модулю UART.
Спасибо за быстрый ответ . Однако я отправляю байты в порт mySerial с помощью следующей команды в цикле: mySerial.println("hell"); Не следует ли инициализировать mySerial ?, @rohit
Тот факт, что вы отправляете что-то на TX, не означает, что это будет отражено обратно на RX, все зависит от того, как вы соединили TX и RX и как вы настроили свой последовательный терминал (если вы его используете)., @jfpoilpret
Последовательная порция инициализирована, но в буфере приема ничего нет, если только вы не отправляете данные на Arduino с компьютера через шпатлевку или telnet и т. д., @Anthony Meyer
Просто удалите оператор if, и код должен заставить светодиод хотя бы мигать., @Anthony Meyer
SoftwareSerial
не может передавать и получать одновременно. Таким образом, даже если вы соедините контакт 8 с 9 проводом, ваш скетч не получит то, что было передано. Это предположение без вашей электрической схемы.
NeoSWSerial может одновременно передавать и получать. Это замена SoftwareSerial
.
Однако AltSoftSerial еще лучше и работает только на контактах 8 и amp; 9. Используйте это вместо этого!
В этом ответе сравниваются все 4 типа серийных номеров, включая HardwareSerial
.
Я сделал два скетча для тестирования. Один для Arduino Nano №1, другой для Arduino Nano №2. Они проверены и работают, а не только написаны на этой странице.
No2 отправляет "привет" и No1 слушает и отправляет его на ПК через Serial. Скорость (1200 бит/с) низкая, но так легче увидеть, что происходит.
Подключите контакт 10 разъема №1 к контакту 11 разъема №2 и заземление к заземлению. Подключите Nanos к USB-портам ПК и установите программу-монитор (1200, 8N1) на прослушивание №1.
Похоже, это хороший способ протестировать команды Serial.print, Serial.println и Serial.write. Вы будете удивлены.
/*№1:/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // прием, передача
void setup() {
Serial.begin(1200);
Serial.println("Testing");
mySerial.begin(1200);
}
void loop() { // повторяем снова и снова
if (mySerial.available()) //Если это отсутствует, вы получите быстро повторяющуюся страницу
{
Serial.write(mySerial.read());
Serial.print(".");
}
}
/*№2:/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // прием, передача
void setup(){
mySerial.begin(1200);
}
void loop(){
mySerial.print("Hello");
}
- Сброс Arduino Uno в коде
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как вызвать функции C из скетча ардуино?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как читать и записывать на устройство rs232 с/на Arduino
Вы неправильно понимаете, что делает «доступный». Он не говорит вам, сколько вы отправили, он говорит вам, сколько байтов находится в буфере приема., @Nick Gammon
Я проверяю, есть ли в буфере какие-то данные, а не квант. Если это условие положительное, светодиод с контактом 13 должен мигать. Одновременно должно быть отправлено сообщение на последовательный терминал. Пожалуйста, дайте мне знать, если логика неверна., @rohit
Вы просто говорите «Это не работает», но вы могли бы, по крайней мере, предоставить следы того, что вы видите на «обычной» последовательной консоли и что вы видите на другой последовательной консоли, что вы вводите в качестве ввода, как вы подключили TX/ RX на ваш терминал. Без этой информации может быть дюжина причин, по которым ваша установка не работает., @jfpoilpret
Можем ли мы увидеть схему вашей проводки, если у вас есть провода?, @Roberto Lo Giacco
Было бы очень полезно, если бы вы могли описать свою настройку, например, вашу проводку и то, как вы отправляете сообщения...., @Mero55
Итак, что подключено к программному последовательному Rx (контакт 8)? Просто соедините контакты 8 и 9, чтобы данные, которые вы отправили через контакт 9, были получены в Rx и удовлетворяли условию if. Если это работает, проблема связана с вашим устройством, подключенным к программному Rx., @Sanu - Open Maker
У тебя правильно подключено? Проводка следующая: Tx одного устройства идет на Rx другого. Tx НЕ идет к Tx. Rx НЕ переходит к Rx. Вы должны пересечь их., @Gabriel Staples