Разобрать строку Bluetooth
Я занимаюсь разработкой на Android с помощью Bluetooth LTE, я могу отправлять шестнадцатеричные коды, но я отправляю один код за раз, поэтому мне нужно отправлять таким образом много информации, как я могу распознать строку и сохранить данные внутри массив, чтобы проанализировать его позже?
Вот мой скетч:
char c=' ';
String inString,one,check;
char inData[11];
char inChar;
int counter=0;
bool started = false;
bool ended = false;
byte index;
boolean NL = true;
const int LED1 = 6;
const int LED2 = 7;
const int LED3 = 2;
const int LED4 = 3;
const int LED5 = 4;
const int LED6 = 5;
void setup() {
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(9600);
Serial.println("BTserial started at 9600");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
}
void loop() {
if (BTserial.available()>0)
{
Serial.print("bts: ");
Serial.println(BTserial.available());
c = BTserial.read();
check = String(c, HEX);
if(check=="ffbc"){
Serial.println("check");
index=0;
while (BTserial.available()>0){
inChar = BTserial.read();
check=String(inChar,HEX);
if(check != "0xfff3")
{
inData[index] = inChar;
index++;
}
}
for (int i=0;i<=11;i++){
one = String(inData[i], HEX);
Serial.print(i);Serial.print(": ");Serial.println(one);
};
}
if(check=="ffca"){
// Serial.write(c);
digitalWrite(LED1, !digitalRead(LED1));
}
if(check=="ffcb"){
//Serial.write(c);
digitalWrite(LED2, !digitalRead(LED2));
}
if(check=="ffcc"){
//Serial.write(c);
digitalWrite(LED3, !digitalRead(LED3));
}
if(check=="ffcd"){
//Serial.write(c);
digitalWrite(LED4, !digitalRead(LED4));
}
if(check=="ffce"){
// Serial.write(c);
digitalWrite(LED5, !digitalRead(LED5));
}
if(check=="ffcf"){
// Serial.write(c);
digitalWrite(LED6, !digitalRead(LED6));
}
}
}
Без цикла я могу прочитать все отдельные данные, но для моей работы этого недостаточно: для распознавания приложений данных я отправляю «образец строки», чтобы распознать тип информации, которую я хочу отправить.
@peppeg85, 👍2
1 ответ
Я думаю, что каким-то образом решил: я всегда отправляю одни и те же коды в начале и в конце данных, чтобы я мог распознать конец, а затем анализировать первый элемент целевого массива. скажите мне, о чем вы думаете, если это может помочь кому-то еще:
if (BTserial.available()>0)
{
c = BTserial.read();
check = String(c, HEX);
if(check!="fff3"){ // я всегда начинаю с fff3
inData[index] = c;
index++;
}
else if(check=="fff3"){ //конец данных
index=0; //сбрасываем индекс для следующего набора данных
if(String(inData[1], HEX)=="ffbc"){
Serial.println("read the next 10 data of the array");
}else if(String(inData[1], HEX)=="11"){
Serial.println("turn on led 1");
}
// для большего количества операций используйте переключатель/регистр вместо if
}
- Можно ли измерить скорость акселерометром? Насколько точно?
- Arduino Pro Micro, получить данные с контакта Tx?
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
- Невозможно подключиться к Bluetooth hc-05.
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Как решить проблему AT+INQ ERROR (1F), AT+INIT ERROR(17) на модуле Bluetooth HC-05?
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Bluetooth-модуль HC-05 — команда INQ не работает
Почему вы используете строку для проверки начальных/конечных данных? Вы можете просто использовать шестнадцатеричное представление:
if(c == 0xfff3)
. И меня немного смущает, что у вас есть 4-значный шестнадцатеричный код для одной операции чтения. Если вы используете библиотеку SoftwareSerial в качестве объекта BTserial, вызов функции read() возвращает по одному байту за раз, поэтому это будет двухзначный шестнадцатеричный код., @chrislпривет, я использую плагин Nativescript для Bluetooth, я не знаю, почему, но если я отправлю символ после 9, Arduino получит ffxx (если я отправлю 0xaa, он отправит 0xffaa). Когда я проводил первые эксперименты, я не мог понять набор символов для анализа, поэтому нашел строку. для btserial я использую altsoftserial, @peppeg85