Тема: Serial.Read для строки
Как прочитать строку, отправленную модулю с компа?
В туториалах везде читают либо int, либо byte, а вот со строками не нашел.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум freeduino.ru → Технические вопросы → Serial.Read для строки
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как прочитать строку, отправленную модулю с компа?
В туториалах везде читают либо int, либо byte, а вот со строками не нашел.
Как прочитать строку, отправленную модулю с компа?
Смотря как Вы ее отправляете. В общем случае все-равно посимвольно, но вопрос стоит в том, что будет являться признаком конца строки. Либо какой-то особый символ (вроде 0, как в C/C++ принято, или "\r\n" как вариант), либо посылать всегда только фиксированное число символов. Можно выдумать такой вариант, что по прошествии time-out'а строка считается прочитанной. Вариантов много.
Может немного подробнее задачу опишите? Я тогда могу какой-нибудь пример кода привести.
Я программирую на c#, переходить на более низкий уровень пока не хочется, да и потребности к freeduino небольшие.
Поэтому придумал залить на модуль такой скетч, который бы отвечал на мои запросы с компа.
Например:
Программа посылает команду: GetAnalog 3\r\n
Freeduino отвечает: 993\r\n
Напрашивается разделение(string.Split(" ")) входящей строки на команду и аргументы,
затем switch-case по имени команды и исполнение нужной команды.
Программка совсем простая, но как на языке Arduino работать со строками не ясно.
Я программирую на c#, переходить на более низкий уровень пока не хочется,
...skipped...
Напрашивается разделение(string.Split(" ")) входящей строки на команду и аргументы,
Все-таки у нас микроконтроллер, и работать в стиле C# не всегда получится. Немного пониже опуститься придется, а то Вам может скоро 2Гб виртуальной памяти захочется :)
Всякими разборами, на мой взгляд, лучше всего заниматься с помощью конечных автоматов.
Универсальных решений не посоветую - обычно под конкретную задачу на месте парсер и пишу.
Вот здесь: http://habrahabr.ru/blogs/arduino/55401/ у меня есть пример библиотеки для Arduino - в ней как раз сделан ввод чисел с последовательного порта.
Программка совсем простая, но как на языке Arduino работать со строками не ясно.
А зачем делать сложный протокол? Ну, с переменной длиной команд?
Пусть посылается первые к примеру 4 символа - код команды, пусть даже буквами, а потом еще сколько-то символов - значение.
И не надо со строками заморачиваться - сами байты и сравнивай.
...пока писал вспомнил - я по весне делал немного похожую штуку - там правда ответа от Arduino не требовалось. Глянь если интересно: http://arduino-ru.blogspot.com/2009/02/arduino.html. Исходники прилагаются.
...и еще вспомнил - на офф. сайте видел библиотеку под твои требования сильно похожую. Вот: http://www.arduino.cc/playground/Code/Messenger. Как раз она читает строку (до CRLF) и потом вроде даже парсит ее (пробел - разделитель), если я верно из описания понял.
круто. то что нужно!
большое спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум freeduino.ru → Технические вопросы → Serial.Read для строки
Форум работает на PunBB, при поддержке Informer Technologies, Inc