выделить символ
- Войдите на сайт для отправки комментариев
Вс, 03/02/2019 - 17:22
Всем доброго здровья!
Не пинайте сильно - понимаю что тема изъезжена, но вот столкнулся с трудностями при чтении данных и пока решить не получается..
Есть дисплей nextion 7 inch. Есть программачтения последовательного порта, вот она:
[code]
if(mySerial.available())// если есть данные...
{
char incomingChar= mySerial.read();// читаем посимвольно
if( incomingChar =='T'|| incomingChar =='E'|| incomingChar =='P'|| incomingChar =='L'|| incomingChar =='O'|| incomingChar >= '1'&& incomingChar <= '8' )
{
message+=incomingChar;// составляем строку из нужных символов
}
Serial.print(message);//печатаем строку
CurrStr= message;
Serial.print(CurrStr);
message="";// очищаем строку
}
[/code]Нужная мне строка (ТЕПЛО26) составляется . Трудности начинаются при попытке выделить подстроку со значением (26).
Ни одна из функций класса String не работает...
Прошу помощи!
Ни одна из функций класса String не работает...
Враки.
Помощи в чем? Ктонить приехает, будет паяльной лампой жечь String?
Уточню: substring и charAt не дают ничего
Как мне выделить число из строки "TEPLO26"?
Твоего кода мы не видели вовсе. С чего такие выводы?
[code] #include <EEPROM.h> #include <SoftwareSerial.h> //int count =0; //int timer_TFT ;//переменная для хранения значения таймера отключения экрана //int flag_timer;//флаг записи значения таймера отключения экрана SoftwareSerial mySerial(8, 9); String message; //здесь храним полученное в порту void setup() { mySerial.begin(9600); Serial.begin(9600); } void loop() { if(mySerial.available())// если есть данные... { char incomingChar= mySerial.read();// читаем посимвольно if( incomingChar =='T'|| incomingChar =='E'|| incomingChar =='P'|| incomingChar =='L'|| incomingChar =='O'|| incomingChar >= '1'&& incomingChar <= '8' ) { message+=incomingChar;// составляем строку из нужных символов } Serial.print(message);//печатаем строку CurrStr= message; Serial.print(CurrStr); message="";// очищаем строку } } [/code]Сходите на родной сайт. Почитайте про стринг. Там больше информации.
https://www.arduino.cc/reference/en/language/variables/data-types/string...
попробую)
Если этта твой скетч, где в нем substring и charAt?
и где тут substring или charAt ?
Если вы еще не поняли - готового рецепта на блюдечке на этом форуме не дают. Спрашивающий должен сам предложить решение, показать свой код - пусть нерабочий, но в котором были бы попытки решить проблему. В Вашем коде никаких попыток извлечь строку 26 не видно - так что пока помогать вам не в чем.
услышал вас. исправляюсь
#include <EEPROM.h> #include <SoftwareSerial.h> //int count =0; //int timer_TFT ;//переменная для хранения значения таймера отключения экрана //int flag_timer;//флаг записи значения таймера отключения экрана SoftwareSerial mySerial(8, 9); String message; //здесь храним полученное в порту void setup() { mySerial.begin(9600); Serial.begin(9600); } void loop() { if(mySerial.available())// если есть данные... { char incomingChar= mySerial.read();// читаем посимвольно if( incomingChar =='T'|| incomingChar =='E'|| incomingChar =='P'|| incomingChar =='L'|| incomingChar =='O'|| incomingChar >= '1'&& incomingChar <= '8' ) { message+=incomingChar;// составляем строку из нужных символов } Serial.print(message.substring(5));//печатаем строку message="";// очищаем строку } }вот так ничего не печатеется
Строка ессно в классическом смысле, а не этот бред "String"! ;))))
А то, что ТС опубликовал - просто бред.
Слон, вставьте на строке 29 оператор Serial.print(message); и посмотрите, что у вас в строке. Уверен, что вы удивитесь
b707, в начальном варианте как раз и было Serial.print(message); в мониторе порта выходило TEPLO26
Слон, вставьте на строке 29 оператор Serial.print(message); и посмотрите, что у вас в строке. Уверен, что вы удивитесь
чтобы он понял, что происходит, нужно еще пробел напечатать после месседж, тогда нагляднее будет.
А закомментируй ка 25 строчку
если закомментировать строчку 25, в порт свалится куча всякого хлама
Паняна.
b707, в начальном варианте как раз и было Serial.print(message); в мониторе порта выходило TEPLO26
ну а все-таки попробуйте. Думаю, что сейчас там не будет TEPLO26
b707, в начальном варианте как раз и было Serial.print(message); в мониторе порта выходило TEPLO26
ну а все-таки попробуйте. Думаю, что сейчас там не будет TEPLO26
попробовал. печатает TEPLO 26
b707, в начальном варианте как раз и было Serial.print(message); в мониторе порта выходило TEPLO26
ну а все-таки попробуйте. Думаю, что сейчас там не будет TEPLO26
попробовал. печатает TEPLO 26
да. Дракула был прав
Вставьте пожалуйства, две строки
Уважаемый! 25 строчка порочна и надо ее чем-то заменить.
Например считываем порт посимвольно и как только появляется Т считываем еще 4 символа, а затем сравниваем с TEPLO если подходит, считываем 2 символа и их печатаем. Неоптимально, но не даст кучу непоняток, как 25 строка.
получается куча = и где то в середине нужные мне данные...
вообще запутался...
теперь вижу... попробовал вставить Serial.print("="); куча хлама
получается куча = и где то в середине нужные мне данные...
вообще запутался...
Воот! Ваша строка 25 никуда не годится - она не не фильтрует нужные данные.
Попробуйте прикинуть - Ваш "фильтр" в строке 25 отбирает из входящих данных не только строчку TEPLO, но и любую комбинацию из этих букв - например "T" "TE" "TEP", а так же "EP" "EEEE" "TTTTT" "OLPET" и сотни и тысячи других бредовых вариантов
b707, извините, не знаю Вашего имени...
а как же получить то что мне нужно?
а как же получить то что мне нужно?
Ну, для начала не надо ничего проверять, пока число накопленных в message символов не станет больше длины строки "TEPLO26" - так как очевидно, что до этого сравнивать бессмысленно
как сравнить две строки в С:
https://ru.wikihow.com/%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D1%8C-%D0%B4%D0%B2%D0%B5-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-%D0%BD%D0%B0-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-C
сорри, вчитался внимательнее по ссылке - местами явный бред попадается, видимо машинный перевод
Вот тут вроде получше
http://all-ht.ru/inf/prog/c/func/strcmp.html
b707 - спасибо! знаний у меня конечно нет совсем). Буду изучать!)
Строка ессно в классическом смысле, а не этот бред "String"! ;))))
А то, что ТС опубликовал - просто бред.
wdrakula, спасибо! теперь въехал