Сравнение строки из Serialport

Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

Кто знает,как сравнить данные (строка),получаемые в SoftwareSerial(bt) с заданным значением?

[spoiler]
#include <SoftwareSerial.h>


SoftwareSerial bt(10, 11); // RX, TX

const int LED =9;



void setup() {
Serial.begin(9600);
bt.begin(9600);
pinMode(LED, OUTPUT);


}
void loop() {

bt.println("AT+RNAME?BBB"); //посылаю команду в Serial port
delay(2550);
while(bt.available()>0){ //жду когда получу ответ
a=(bt.read()); //запоминаю ответ в переменной a,

Serial.print(a );}n //вывожу в монитор порта полученное значение,
// оно имеет вид
// +RNAME:LeMax
// OK
if (a=="+RNAME:LeMax") {



digitalWrite(LED, HIGH);
}
else
digitalWrite(LED, LOW);

}
[/spoiler]
Сравнию и ничего не получаю,понимаю что в ответе кроме +RNAME:LeMax есть еще ОК и какие то служебные символы
Как их записать в условие
if (a=="?")
Спасибо за ответ.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

чёт не вижу где объявлена переменная - а
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Сравнение строки из Serialport

Сообщение Sancho »

Читать тут
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

забыл здесь написать,обьявляю в
void loop{
char a="";
........
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

Brand2 писал(а): 20 апр 2018, 16:03
char a="";
........
почему char а не string ?


if ((a.indexOf(String("+RNAME:LeMax ")))>-1) { /////;}
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

когда обьявляю ее как
string
то при компиляции в строке
String a=(bt.read());компилятор пишет
exit status 1
conversion from 'int' to 'String' is ambiguous
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

надо смотреть в библиотеке что возвращает эта функция
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

может я неправильно обьявляю переменную а?
как это сделать правильно?

Отправлено спустя 6 минут 1 секунду:
я так понял что
a=bt(read());
посылает ответ в виде int,
может есть возможность преобразовать int в String?
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

Brand2 писал(а): 20 апр 2018, 16:33 преобразовать int в String?
а вас проблемы с поиском?

int a = 1;
String b;
b = String(a);
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

да в поиске полно результатов,только нифига не получается,спасибо за ответ .

Отправлено спустя 6 минут 22 секунды:
int a="";
while(bt.available()>0){
a=(bt.read());
Serial.print(a );}


String b;
b = String(a);
if ((b.indexOf(String("+RNAME:LeMax "))))>-1){.....}

ругается :
error: expected primary-expression before '>' token

if ((b.indexOf(String("+RNAME:LeMax "))))>-1){
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

Brand2 писал(а): 20 апр 2018, 16:57
int a="";
это что за чудо?
Brand2 писал(а): 20 апр 2018, 16:57
if ((b.indexOf(String("+RNAME:LeMax "))))>-1){.....}

ругается :
надо попробовать присвоить значение этой строки в промежуточную переменную а потом засовывать в if

что за точки в скобках? там должен быть какой то код и точка с запятой ;
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Сравнение строки из Serialport

Сообщение Sancho »

Главное - читать и понять, что приходит ТУТ
Понять, что нет string сразу!!!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

посмотрите что возвращает функция (bt.read());
или библиотеку что ли покажите нам
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Сравнение строки из Serialport

Сообщение Sancho »

Взять блок из программы, принять строку, присвоить переменной, сравнить(для понимания) - посмотреть получившийся код. Не???
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

bt(read)
это
SoftwareSerial bt(10, 11); // RX, TX
Посылаю туда АТ команду и получаю ответ
while(bt.available()>0){
a=(bt.read());
этот ответ в мониторе порта выглядит так

+RNAME:LeMax
OK

Мне нужно сравнить полученный ответ с заданным LeMax.
Уже запутался каким типом обьявить переменную а и заданное значение LeMax
и как их потом сравнивать
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

сек

Отправлено спустя 19 минут 32 секунды:
вот что значит заниматься несколькими делами. это bt сбило с толку, подумал что это библиотека какая то...

while (bt.available() > 0) {
int inChar = bt.read();
inString += (char)inChar;

или

String Var=""; //переменная для приема строки
while (bt.available() > 0) {
Var = Var + (char)(bt.read());}
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

Спасибо pan,
а каким типом мне определить переменные и пароль,и что потом подставлять в if(?)/......
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

откуда ж мне знать. вопрос был про то как сравнить строки.
а что должно происходить при совпадении это уже вопрос к вам.
судя по первому посту зажечь светодиод
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Сравнение строки из Serialport

Сообщение Brand2 »

хочу пока печать только в монитор порта,значит это будет так?
while (bt.available() > 0) {
int inChar = Serial.read();

if(inString += (char)inChar) {


Serial.print( "READY" );

}
else

Serial.print( "NOT READY" );

}
и как определить переменные,?в
void setup()
int inChar;
String inString="LeMax";
правильно?
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Сравнение строки из Serialport

Сообщение pan »

вообще переменные объявлять выше setup
int inChar;
String inString="";
int contain; //на всякий случай через неё

зачем inString += (char)inChar засовывать в if
это идет сборка строки из принятых символов

while (bt.available() > 0) {
int inChar = bt.read(); // bt это ваш программный порт для блютуса , а не serial
inString += (char)inChar; }

contain = (inString.indexOf(String("+RNAME:LeMax "))

if (contain != -1) {
Serial.print( "READY" );}

else{
Serial.print( "NOT READY" ); }

как то так примерно.
Ответить

Вернуться в «С++ в Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость