roboforum.ru

Технический форум по робототехнике.

Mega+Nano работа с сериал портом

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Mega+Nano работа с сериал портом

Сообщение olegsem » 18 июн 2011, 21:11

Добрый вечер, с Nano по seral.print на Mega вывожу строку следующего вида 26.00H,-127.00S#26.00H,-127.00S#26.00H,-127.00S#26.00H,-127.00S# и т.д. принимаю на Mega и транслирую на ком-порт компа, в Processing все нормуль получается и я эту строку раскладываю на две переменных и вывожу на экран компа следующим кодом:

void serialEvent (Serial port)
{
data = port.readStringUntil('#');
data = data.substring(0, data.length() - 3);
index = data.indexOf(",");
tempH = data.substring(0, index-2);
tempS = data.substring(index+1, data.length());
}

Тут все красиво и правильно получается и я вижу на компе заветные цифры)))

Так вот, к меге прикручен ks0108 (glcd.h) и на меге хочу из этой строки полученной по serial1 26.00H,-127.00S#26.00H,-127.00S# выщемить эти две переменные разделенные запятой, а # - конец строки, мне хотелось бы получить переменные в виде int = T1 и int = T2, чтобы выводить на ks0108. В общем нужно строку разложить на две переменные и,в принципе, не важно как.
Если кто сталкивался подскажите где читануть или лучше пример кода.
Возможно ли вообще такое закодить?
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 19 июн 2011, 12:33

Упростил пока задачу и вывожу с Nano на Mega один параметр, допустим принимаю следующее значение 30.2#
Кусок кода который обрабатывает данные на Mega:

if (Serial1.available()) {
int inByte = Serial1.read();
Serial.print(inByte);
Serial.println(inByte - 48);

и в терминале вижу следующее:

513
480
46-2
502
35-13
513
480
46-2
502
35-13

т.е. 513 - это ASCII 51 = 3
480 - это ASCII 48 = 0
46-2 - это ASCII 46 = должна быть точка но выводит -2
502 - это ASCII 50 = 2
35-13 - это ASCII 35 = должен быть # но выводит -13

Пример ASCII из IDE отображает все символы правильно, как правильно отобразить символ из ASCII 35 если от него надо вычесть 48?)))
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение Angel71 » 19 июн 2011, 20:30

вы когда си "изучали", момент с типами данных случаем не пропустили?
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 19 июн 2011, 22:16

Решение может не самое удачное но пока только так получилось:
char inByte[32]; // Массив для строки в 32 символа

а здесь каждый символ по порядку (или в любой другой последовательности можно выводить куда угодно)
if (Serial1.available()) {
int i=0;
while (i<32){
inByte[i] = Serial1.read();
Serial.print(inByte[0]);
Serial.print(inByte[1]);
Serial.print(inByte[2]);
Serial.print(inByte[3]);
//Serial.print(inByte[4]);
//Serial.print(inByte[5]);
i++; }
GLCD.CursorTo(0, 0);
GLCD.print(inByte[0]);
GLCD.print(inByte[1]);
GLCD.print(inByte[2]);
GLCD.print(inByte[3]);

уже хоть что-то, теперь бы из inByte[0]+inByte[1]+inByte[2]+inByte[3] получить float, нужно как-то так что б вышло 2+9+.+2 = 29.2
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение Angel71 » 19 июн 2011, 22:55

оно ни не удачное, оно... в общем совсем неудачное. вгоняете всё до символа # в буфер или всё сразу в буфер запихиваете. парсите, конвертируете в нужный тип и присваиваете соответствующим переменным. :) и всё это делаете посимвольно. и главное не использовать библиотечные функции по для парсинга и преобразования типов, а то вы так вечность будете стопориться на простеньких задачках.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 19 июн 2011, 23:27

Angel71 писал(а): вгоняете всё до символа # в буфер, парсите, конвертируете в нужный тип и присваиваете соответствующим переменным.

Можно примеры кода или ссылки для ардуиновсого C#? Особенно интересно про парсинг. Спасибо.
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение Angel71 » 20 июн 2011, 01:49

можно было изначально написать за вас код. только вам уже пора учиться самому писать простые алгоритмы, пользоваться поисковиками и галопом не изучать язык.
парсинг интересен? разве что шутя, чтот на подобии
Код: Выделить всёРазвернуть
^[-+]?[0-9]\d{0,2}(\.\d{1,2})?%?$

и http://www.gammon.com.au/forum/?id=11063
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Mega+Nano работа с сериал портом

Сообщение galex1981 » 20 июн 2011, 15:27

На С++ можно например так сделать:
Код: Выделить всёРазвернуть
   CString str1;
   str1 = "26.00H,-127.00S#26.00H,-127.00S#";
   int pos = str1.Find(',');//Найти первую запятую
   int T1 = atoi(str1.Mid(0,pos-1));//Вырезать первое число и из строки сконвертировать в int
   CString str2 =str1.Mid(pos+1,str1.Find('#')-pos-2);//Найти вхождение символа конца строки # и вырезать второе число
   int T2 = atoi(str2);//сконвертировать в int второе число

if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4362
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 20 июн 2011, 20:46

Вот спасибо, так более понятно.
Подскажите еще как в буфер впинуть данные до определенного символа, и выпихнуть потом в виде одной строки. Я не программист, изучаю Си для себя в рамках ардуины, поэтому плаваю пока на поверхности, потому что в литературе по ардуине такого нет и там тоже все поверхностно. Залезать глубоко в Си не могу по причине небольшого опыта в следствие этого не понимаю того, что вроде бы, для программиста очевидно, но я постепенно продвигаюсь вперед.
Вы ведь тоже когда-то с чего-то начинали же... и не получалось... но постепенно опыт и знания приходят.
Порекомендуйте пож. книги в которых си наиболее приближен к ардуиновсому, где на пальцах разжевано)))
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 21 июн 2011, 13:28

Angel71, какой из комманд заявленных в кейворде для ардуины нужно обрабатывать ваш шуточный парсинг ^[-+]?[0-9]\d{0,2}(\.\d{1,2})?%?$ ???

keywords.txt
MatchState
Match
Target
GetMatch
GetCapture
GetResult
MatchCount
GlobalMatch
GlobalReplace

Какой из этих комманд провести поиск? какой разбивку строки на переменные?
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение Grem » 21 июн 2011, 14:43

2ТС, вот вам кейворды для гугла - regex arduino
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 21 июн 2011, 15:22

Понятно, видимо на Украине с таким не сталкивались если конкретно пояснить не могут))) Только умничать.
Не понимаю зачем писать это "вот вам кейворды для гугла - regex arduino" если нечего ответить..., просто встрять в разговор?
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

Re: Mega+Nano работа с сериал портом

Сообщение Grem » 21 июн 2011, 15:39

Видимо не понятно кто здесь учится.
Хотите проверить мои знания? Окей, составьте нормальное тз, 50$ и 30 мин вашего ожидания.
Прежде чем дать кейворды для гугла, я сам посмотрел его выдачу и убедился, что там есть то, что вам надо по регэкспам.
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

Re: Mega+Nano работа с сериал портом

Сообщение noonv » 21 июн 2011, 15:52

olegsem писал(а): если нечего ответить..., просто встрять в разговор?

чтобы научиться программировать - нужно программировать. у вас есть своя конкретная задача, так напишите своё решение. да - оно будет корявым и через какое-то время вы сами будете над ним смеяться, но это путь, который нужно пройти.
А обвинять всех, что вам не помогают - контрпродуктивно. Посылают в поисковик? может не нужно обижаться, а попробовать поискать?
:)
Аватара пользователя
noonv
 
Сообщения: 601
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

Re: Mega+Nano работа с сериал портом

Сообщение olegsem » 21 июн 2011, 16:02

noonv, я привел свое решение выше и сам вижу что оно не самое удачное, попросил помочь хотя бы ссылками на примеры удачных решений...
Grem, если уж Вы нашли то что я ищу (как менее опытный я может быть просто этого не вижу) то почему бы не поделится ссылками вместо того что бы отправлять в поиск
olegsem
 
Сообщения: 63
Зарегистрирован: 05 дек 2008, 13:40
Откуда: Смоленск

След.

Вернуться в Arduino и другие Xduino

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

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

cron