1

Тема: Serial.Read для строки

Как прочитать строку, отправленную модулю с компа?

В туториалах везде читают либо int, либо byte, а вот со строками не нашел.

2

Re: Serial.Read для строки

realist пишет:

Как прочитать строку, отправленную модулю с компа?

Смотря как Вы ее отправляете. В общем случае все-равно посимвольно, но вопрос стоит в том, что будет являться признаком конца строки. Либо какой-то особый символ (вроде 0, как в C/C++ принято, или "\r\n" как вариант), либо посылать всегда только фиксированное число символов. Можно выдумать такой вариант, что по прошествии time-out'а строка считается прочитанной. Вариантов много.
Может немного подробнее задачу опишите? Я тогда могу какой-нибудь пример кода привести.

3 (2009-08-24 18:00:30 отредактировано realist)

Re: Serial.Read для строки

Я программирую на c#, переходить на более низкий уровень пока не хочется, да и потребности к freeduino небольшие.

Поэтому придумал залить на модуль такой скетч, который бы отвечал на мои запросы с компа.

Например:
Программа посылает команду: GetAnalog 3\r\n
Freeduino отвечает: 993\r\n

Напрашивается разделение(string.Split(" ")) входящей строки на команду и аргументы,
затем switch-case по имени команды и исполнение нужной команды.

Программка совсем простая, но как на языке Arduino работать со строками не ясно.

Re: Serial.Read для строки

realist пишет:

Я программирую на c#, переходить на более низкий уровень пока не хочется,
...skipped...
Напрашивается разделение(string.Split(" ")) входящей строки на команду и аргументы,

Все-таки у нас микроконтроллер, и работать в стиле C# не всегда получится. Немного пониже опуститься придется, а то Вам может скоро 2Гб виртуальной памяти захочется :)
Всякими разборами, на мой взгляд, лучше всего заниматься с помощью конечных автоматов.
Универсальных решений не посоветую - обычно под конкретную задачу на месте парсер и пишу.
Вот здесь: http://habrahabr.ru/blogs/arduino/55401/ у меня есть пример библиотеки для Arduino  - в ней как раз сделан ввод чисел с последовательного порта.

realist пишет:

Программка совсем простая, но как на языке Arduino работать со строками не ясно.

А зачем делать сложный протокол? Ну, с переменной длиной команд?
Пусть посылается первые к примеру 4 символа - код команды, пусть даже буквами, а потом еще сколько-то символов - значение.
И не надо со строками заморачиваться - сами байты и сравнивай.

...пока писал вспомнил - я по весне делал немного похожую штуку - там правда ответа от Arduino не требовалось. Глянь если интересно: http://arduino-ru.blogspot.com/2009/02/arduino.html. Исходники прилагаются.

...и еще вспомнил - на офф. сайте видел библиотеку под твои требования сильно похожую. Вот: http://www.arduino.cc/playground/Code/Messenger. Как раз она читает строку (до CRLF) и потом вроде даже парсит ее (пробел - разделитель), если я верно из описания понял.

5

Re: Serial.Read для строки

круто. то что нужно!
большое спасибо.