Страница 1 из 2

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

Добавлено: 20 апр 2018, 15:48
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=="?")
Спасибо за ответ.

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

Добавлено: 20 апр 2018, 15:52
pan
чёт не вижу где объявлена переменная - а

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

Добавлено: 20 апр 2018, 15:56
Sancho
Читать тут

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

Добавлено: 20 апр 2018, 16:03
Brand2
забыл здесь написать,обьявляю в
void loop{
char a="";
........

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

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


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

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

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

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

Добавлено: 20 апр 2018, 16:19
pan
надо смотреть в библиотеке что возвращает эта функция

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

Добавлено: 20 апр 2018, 16:33
Brand2
может я неправильно обьявляю переменную а?
как это сделать правильно?

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

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

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

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

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

Добавлено: 20 апр 2018, 16:57
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){

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

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

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

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

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

Добавлено: 20 апр 2018, 19:25
Sancho
Главное - читать и понять, что приходит ТУТ
Понять, что нет string сразу!!!

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

Добавлено: 20 апр 2018, 19:33
pan
посмотрите что возвращает функция (bt.read());
или библиотеку что ли покажите нам

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

Добавлено: 20 апр 2018, 19:33
Sancho
Взять блок из программы, принять строку, присвоить переменной, сравнить(для понимания) - посмотреть получившийся код. Не???

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

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

+RNAME:LeMax
OK

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

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

Добавлено: 20 апр 2018, 20:55
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());}

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

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

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

Добавлено: 20 апр 2018, 21:13
pan
откуда ж мне знать. вопрос был про то как сравнить строки.
а что должно происходить при совпадении это уже вопрос к вам.
судя по первому посту зажечь светодиод

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

Добавлено: 20 апр 2018, 21:48
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";
правильно?

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

Добавлено: 20 апр 2018, 22:04
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" ); }

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