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

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#1

Сообщение Brand2 » 20.04.2018{, 15:48}

Кто знает,как сравнить данные (строка),получаемые в SoftwareSerial(bt) с заданным значением?
СпойлерПоказать
#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);

}
Сравнию и ничего не получаю,понимаю что в ответе кроме +RNAME:LeMax есть еще ОК и какие то служебные символы
Как их записать в условие
if (a=="?")
Спасибо за ответ.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#2

Сообщение pan » 20.04.2018{, 15:52}

чёт не вижу где объявлена переменная - а

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#3

Сообщение Sancho » 20.04.2018{, 15:56}

Читать тут
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#4

Сообщение Brand2 » 20.04.2018{, 16:03}

забыл здесь написать,обьявляю в
void loop{
char a="";
........

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#5

Сообщение pan » 20.04.2018{, 16:05}

Brand2 писал(а):
20.04.2018{, 16:03}

char a="";
........
почему char а не string ?


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

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#6

Сообщение Brand2 » 20.04.2018{, 16:13}

когда обьявляю ее как
string
то при компиляции в строке
String a=(bt.read());компилятор пишет
exit status 1
conversion from 'int' to 'String' is ambiguous

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#7

Сообщение pan » 20.04.2018{, 16:19}

надо смотреть в библиотеке что возвращает эта функция

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#8

Сообщение Brand2 » 20.04.2018{, 16:27}

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

Отправлено спустя 6 минут 1 секунду:
я так понял что
a=bt(read());
посылает ответ в виде int,
может есть возможность преобразовать int в String?

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#9

Сообщение pan » 20.04.2018{, 16:43}

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

int a = 1;
String b;
b = String(a);

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#10

Сообщение Brand2 » 20.04.2018{, 16:51}

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

Отправлено спустя 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.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#11

Сообщение pan » 20.04.2018{, 19:20}

Brand2 писал(а):
20.04.2018{, 16:57}

int a="";
это что за чудо?
Brand2 писал(а):
20.04.2018{, 16:57}

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

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

что за точки в скобках? там должен быть какой то код и точка с запятой ;

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#12

Сообщение Sancho » 20.04.2018{, 19:25}

Главное - читать и понять, что приходит ТУТ
Понять, что нет string сразу!!!
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#13

Сообщение pan » 20.04.2018{, 19:33}

посмотрите что возвращает функция (bt.read());
или библиотеку что ли покажите нам

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#14

Сообщение Sancho » 20.04.2018{, 19:33}

Взять блок из программы, принять строку, присвоить переменной, сравнить(для понимания) - посмотреть получившийся код. Не???
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#15

Сообщение Brand2 » 20.04.2018{, 20:21}

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

+RNAME:LeMax
OK

Мне нужно сравнить полученный ответ с заданным LeMax.
Уже запутался каким типом обьявить переменную а и заданное значение LeMax
и как их потом сравнивать

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#16

Сообщение pan » 20.04.2018{, 20:35}

сек

Отправлено спустя 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
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#17

Сообщение Brand2 » 20.04.2018{, 21:07}

Спасибо pan,
а каким типом мне определить переменные и пароль,и что потом подставлять в if(?)/......

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#18

Сообщение pan » 20.04.2018{, 21:13}

откуда ж мне знать. вопрос был про то как сравнить строки.
а что должно происходить при совпадении это уже вопрос к вам.
судя по первому посту зажечь светодиод

Brand2
Лейтенант
Сообщения: 414
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

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

#19

Сообщение Brand2 » 20.04.2018{, 21:48}

хочу пока печать только в монитор порта,значит это будет так?
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.04.2017{, 11:57}
Репутация: 204
Имя: noname

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

#20

Сообщение pan » 20.04.2018{, 22:04}

вообще переменные объявлять выше 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" ); }

как то так примерно.

Ответить

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