#string #bluetooth #esp32 #arduino-ide
Вопрос:
У меня проблема с получением строковых данных по Bluetooth, а точнее с их последующим использованием.
#include "BluetoothSerial.h"
String text = "";
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32"); //Bluetooth device name
;}
void loop() {
if (SerialBT.available() > 0) {
text = SerialBT.readStringUntil('n');
Serial.println(text);
if(text == "go") {
Serial.println("Info");
}
}
delay(20);
}
Когда я отправляю что-то в виде строковых данных, SerialBT.println(text);
функция работает нормально, но следующая функция if(text == "go")
больше не работает.
Две символьные строки не совпадают.
Для обычного сериала все работает нормально.
Как это исправить?
Комментарии:
1. Я бы предположил, что
text
на самом деле это содержит больше, чем просто «идти», поэтому они не равны. Не могли бы вы попробоватьif(text.indexOf("go") > 0)
? Это выполняет поиск go и возвращает позицию вtext
. Если он не найден, будет возвращен -12. Это помогло бы узнать, что на самом деле сравнивается. Напишите некоторый код для вывода каждого символа,
text
чтобы вы поняли, почему сравнение не удается. Это должно дать вам ваш ответ.
Ответ №1:
Я знал, что Bluetooth отправляет некоторые дополнительные переменные, но я не знал, как их обнаружить и удалить. Но я уже нашел решение.
Во-первых, я использовал text = SerialBT.read();
для обнаружения дополнительного символа. Bluetooth отправляет дополнительный символ в конце строковых данных. Итак, я потом воспользовался text.remove(text.length()-1,1);
, и все уже работает правильно.
Завершенный код:
void loop() {
if (SerialBT.available() > 0) {
text = SerialBT.readStringUntil('n');
text.remove(text.length()-1, 1);
Serial.println(text);
if(text == "go") {
Serial.println("Info");
}
}
delay(20);
}