Невозможно управлять цифровыми контактами с помощью команд, отправленных через модуль HC-05.
Я пытаюсь управлять светодиодом на контакте 13, используя приведенный ниже код, но он не работает. С помощью этого кода я могу печатать на последовательном мониторе, но код не влияет ни на один из цифровых контактов. Я не могу управлять светодиодом, поэтому я застрял и не могу двигаться дальше. Я не могу понять, почему это происходит, даже если я исключил новую строку из приложения Bluetooth, которое я использую для отправки строк и того же на последовательном мониторе.
#include<SoftwareSerial.h> // импортируем серийную библиотеку
SoftwareSerial bluetooth(6, 7); // прием, передача
void setup(){
Serial.begin(9600); //установить скорость передачи данных
bluetooth.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop(){
while (bluetooth.available()){
char ch = bluetooth.read();
message += ch;
}
if(!bluetooth.available()){
if(message != ""){
if(message.equalsIgnoreCase("on")){
digitalWrite(13, HIGH);
}else{
digitalWrite(13, LOW);
}
Serial.println(message);
message = "";
}
}
}
@Sudhanshu Shivam, 👍-1
Обсуждение1 ответ
Ваша логика - полный бардак. У вас есть:
- Если символ доступен, прочитайте его и добавьте в
сообщение
. - Если доступен другой символ, сравните то, что вы уже сохранили, с помощью
on
.- Если оно равно ("o" не равно "on"), включить, иначе выключить.
- Распечатайте то, что вы сохранили.
- Забудьте о том, что вы сохранили
- Перейдите к шагу 1 (символ все еще доступен, поскольку вы никогда не читали его на этапе 2).
Вместо этого вам нужно нечто большее, например:
- Если символ доступен, считать его в переменную.
- Если прочитанный вами символ является символом конца строки:
- Сравните свое
сообщение
со словом "включено" и примите соответствующие меры
- Сравните свое
- Если прочитанный вами символ не является символом конца строки:
- Добавьте символ в
сообщение
.
- Добавьте символ в
- Перейти к 1.
Обратите внимание, что вы проверяете наличие доступного символа только один раз, и все ваши проверки выполняются в одном блоке if
.
так что я в основном пробовал это, но это не работает, @Sudhanshu Shivam
Комментарии не место для сброса кода., @Majenko
очень жаль об этом, @Sudhanshu Shivam
- Как заставить Arduino печатать на Arduino IDE моего Mac через Bluetooth?
- Баскетбольная доска Arduino бесконечно передает забитый мяч
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как читать и записывать на устройство rs232 с/на Arduino
Каков вывод последовательного терминала? Это именно то, что достигает кода, так что это очень поможет. Я обновлю свой ответ, когда вы предоставите больше информации . Также: Как вы подключили HC-05? Вы использовали делитель напряжения для линии RX? (HC-05 работает с 3,3 В, а большинство плат Arduino с 5 В). И оператор if
if(!bluetooth.available())
здесь не нужен, потому что, когда вы выходите из цикла while, нет ничего доступного. , если он не получен в течение этих нескольких тактов выполнения между ними., @chrislпоследовательный монитор выводит «on» как «o» и «n» в отдельных строках. Bluetooth-терминал на моем телефоне ничего не печатает. Но код работает нормально, если я использую обычные контакты (Rx, Tx), терминал на моем телефоне также печатает строки, которые он отправляет, и это работает нормально даже без делителя напряжения. Я просто не хочу задействовать штифты (1,2). Я не знаю, есть ли проблема с библиотекой SoftwareSerial, @Sudhanshu Shivam
символы приходят медленнее по SoftwareSerial, и ваш код не ждет их. если следующий символ недоступен сразу, вы продолжаете цикл, @Juraj
пожалуйста, уточните, я пробовал while(blurtooth.available()==0); ждать данных, но это не работает;, @Sudhanshu Shivam
В основном у меня возникла проблема из-за того, что некоторые значения мусора поступали, и я справился с этим, используя if(message.substring(0,2).equals("on")). и теперь он работает нормально, @Sudhanshu Shivam