roboforum.ru

Технический форум по робототехнике.
Текущее время: 22 апр 2025, 05:26

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Mega+Nano работа с сериал портом
СообщениеДобавлено: 18 июн 2011, 21:11 
Не в сети

Зарегистрирован: 05 дек 2008, 13:40
Сообщения: 63
Откуда: Смоленск
Добрый вечер, с 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. В общем нужно строку разложить на две переменные и,в принципе, не важно как.
Если кто сталкивался подскажите где читануть или лучше пример кода.
Возможно ли вообще такое закодить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 19 июн 2011, 12:33 
Не в сети

Зарегистрирован: 05 дек 2008, 13:40
Сообщения: 63
Откуда: Смоленск
Упростил пока задачу и вывожу с 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?)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 19 июн 2011, 20:30 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 19 июн 2011, 22:16 
Не в сети

Зарегистрирован: 05 дек 2008, 13:40
Сообщения: 63
Откуда: Смоленск
Решение может не самое удачное но пока только так получилось:
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 19 июн 2011, 22:55 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 19 июн 2011, 23:27 
Не в сети

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

Можно примеры кода или ссылки для ардуиновсого C#? Особенно интересно про парсинг. Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 20 июн 2011, 01:49 
Не в сети
Аватара пользователя

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

и http://www.gammon.com.au/forum/?id=11063


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 20 июн 2011, 15:27 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
На С++ можно например так сделать:
Код:
   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);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 20 июн 2011, 20:46 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 13:28 
Не в сети

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

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

Какой из этих комманд провести поиск? какой разбивку строки на переменные?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 14:43 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
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ß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 15:22 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
Видимо не понятно кто здесь учится.
Хотите проверить мои знания? Окей, составьте нормальное тз, 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ß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 15:52 
Не в сети
Аватара пользователя

Зарегистрирован: 21 май 2007, 22:57
Сообщения: 600
Откуда: Калининград
прог. языки: C++
olegsem писал(а):
если нечего ответить..., просто встрять в разговор?

чтобы научиться программировать - нужно программировать. у вас есть своя конкретная задача, так напишите своё решение. да - оно будет корявым и через какое-то время вы сами будете над ним смеяться, но это путь, который нужно пройти.
А обвинять всех, что вам не помогают - контрпродуктивно. Посылают в поисковик? может не нужно обижаться, а попробовать поискать?
:)

_________________
RoboCraft.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mega+Nano работа с сериал портом
СообщениеДобавлено: 21 июн 2011, 16:02 
Не в сети

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO