Дублирование строки считывания с последовательного порта блютуза
- Войдите на сайт для отправки комментариев
Пнд, 18/07/2016 - 23:00
Коллеги, вечер добрый!
Не могу разобраться с проблемой. Значит такая ситуация у меня блютуз модуль HC-05 с base board.
Написал подпрограмму для считывания всех данных, которые я отправляю на этот модуль. Но почему-то при запросе текущей строки иногда она дублируется (ощущение, что последовательный порт не очищает буфер), а иногда норм.
Также, решил посмотреть сколько раз программа залазает в мою функцию считывания строки из порта, всегда строго два. Вот листинг
char incomingByte; // входящие данные int LED = 13; // LED подключен к 12 пину int STATE = 6; //STATE BT boolean flag = false; String BT_String; int countt = 1; void setup() { Serial2.begin(9600); // инициализация порта pinMode(LED, OUTPUT); pinMode(STATE, INPUT); Serial.begin(9600); Serial2.print("Current state bluetooth connection: "); Serial2.println(state_connect()); } void loop() { if (readBT() == true) { countt++; if (BT_String == "STATE") Serial.println(state_connect()); Serial.println(BT_String); //delay(500); Serial.println(countt, DEC); //delay(300); } else { //Serial.println("Clear"); //delay(100); } } boolean state_connect() { if (digitalRead(STATE)) return true; else return false; } boolean readBT() { boolean flagStop = false; BT_String = ""; if (Serial2.available() > 0) { //Если пришли данные во второй порт (от блутуса) while (flagStop == false) { //Флаг остановки считывания с порта БТ, если истина, значит конец строки int inChar = Serial2.read(); //Считываем очередной символ if (inChar >= 0) //Убираем символы начала пакета вида "яяяяяя..." if (inChar == '\n') flagStop = true; //Отлавливаем конец строки else BT_String += (char)inChar; //Считываем в строку значение из порта блютуса } return true; //Возвращаем истину, если значение считано успешно } else return false; //Ложь, если порт БТ пустой }
Собственно в функцию readBT() программа залазеет по два раза, прежде, чем возвращаемое значение функции действительно станет false. Помогите разобраться. Ну и заодно может упрастить можно код как-то.
Если кому интересно - то проблема была в программе терминала + код.
Значит сама программа называется Bluetooth Terminal под Win10 в магазине купленная, она почему-то дважды отправляла сообщение. Ну и сам код слишком громоздкий оказался - вот его правильное решение при условии, что конец строки обозначен как \n (каретка на след. строку)
Если другой символ, то корректируйте в соответствующем месте.