Как объединить символы приходячие через UART в слово?
- Войдите на сайт для отправки комментариев
Вс, 16/03/2014 - 02:25
Здравствуйте.
Я собрал лед куб и теперь пишу программу для него.
Но я столкнулся с проблеммой. Мне нужно чтобы когда я посылаю какое нибудь слово через UART (RS232) программа исполняла какоенибудь действие в зависимости от рутины. Код который я написал работает только на один символ. А как сделать чтобы он работал на целое слово?
Это только пример кода. Весь код страниц на двадцать.
Помогите пожалуйста.
char incomingByte; void setup() { Serial.begin(9600); } void loop() { // Если что то пришло в порт то программа в зависимости от if // запускает определенную рутину. if (Serial.available() > 0) { incomingByte= Serial.read(); } if (incomingByte=='Cube') { Serial.println("Cube"); Cube(); } if (incomingByte=='Salute') { Serial.println("Salute"); Salute(); } if (incomingByte=='Spirala') { Serial.println("Spirala"); Spirala(); } if (incomingByte=='Rain') { Serial.println("Rain"); Rain(); } } void Cube(){ // Здесь программа что то исполняет } void Salute(){ // Здесь программа что то исполняет } void Spirala(){ // Здесь программа что то исполняет } void Rain(){ // Здесь программа что то исполняет }
Зарание извините за мой РУССКИЙ
а почему бы вам прочитанные символы не собирать в массив? http://arduino.ru/forum/programmirovanie/s-com-portom-chto-ne-poimu#comment-60692 что-то типа такого..
собрать отдельные символы в строку, очевидно же
собрать отдельные символы в строку, очевидно же
глобальная переменная
Я попробовал адаптировать ваш код под свои нужды. Однако у меня что то не получается.
Когда я пишу в COM слово "test" он почемуто не заходит в void analyzer().
Обьясните пожалуста где ошибка?
ну вы же сами себе и ответили - пишете "test", а это никаким боком не '\0' :)
отмониторьте, какие именно символы/байты прилетают в обработчик, когда вы пишете этот свой "test", и все вопросы снимутся
Так пример который вам дали, вы же сами и поломали:
строк тут очень мало, сложены они из самых простых функций, разберитесь как оно работает
Так как-то легче читается код:
Извиняйте, но мне проще воспринимать условия, когда они в одну строку, привычка дробить строки родилась у бывалых из-за маленьких мониторов, а я тогда мал ещё был и привычкой соответственно не обзавёлся.
Да ради бога :) Дело вкуса. Ctrl-T в ArduinoIDE все расставляет по своим местам :)
Я там еще обработку \n, добавил. Мало-ли какой Line Ending выставлен в терминале. А то он у вас тоже попадал в буффер и потом выводился в println, будет давать лишний перевод строки.
Не считая того, что сама комманда может не распознатся. Так как "test\n" не равно "test"
замечание верное, хотел я упомянуть, но забыл, команда гарантированно не распознаётся из-за char(10), пример просто выдернул из недавнего скетча где уже всё на процессинг завязано.
Тоесть порт не видит символа "возврат каретки"Почему это происхоит?
"New line" - символ новой строки
"Carriage return" - перевод каретки