![]() |
Вопрос по Ардуино. Хелп плиз-((
Плата: фридуино на 168й меге.
Пишу программку общения с ком-портом. Суть - в порт передаются команды типа ATS12345 Программка их парсит побайтно и в зависимости от команды выполняет те или иные действия. Уперся я о непонятный камень: код работает нестабильно. в монитор порта вбиваю ATS в 50% случаев (примерно) код доходит до выполнения Serial.println("SET COMMAND /PIN "); НО(!!!!) Стабильно в цикле забивания массива выводит именно те байты, что передавались. Но if и switch работают по-китайски. И еще нюанс такой: Serial.print как-то больше способствует корректной работе кода с массивом. В чем может быть трабл? Уже идей никаких нет. PHP код:
|
ваще seral.println Никогда не использовал. только serial.print.
и еще. массив cmd[i] очищается если ни одно из условий не выполняется или нет? может жестко проверять при приеме данных из порта по маске команды и как только расхождение обнаружилось сразу массив очищать. |
и еще. про serial.flush после каждого приема верной комманды не помешает вроде. Хотя тут я хз. вроде не надо.
|
Цитата:
так что обработка ИНАЧЕ смысла пока не имеет. вот результат нескольких подряд вбитых "ATS1234": Цитата:
Цитата:
|
выберете жестко формат комманды AT xxxxx
и по этой маске команды парсите. как только у вас расхождение команды с маской буфер очищаете и ничего в него не пишете пока первый символ "A" не появится. С этого момента начинаете писать в буфер и снова сличать с маской. |
Цитата:
Цитата:
Результат работы кода - разный. Код элементарный - читаем байты с порта, пока есть данные, забиваем их в массив и далее смотрим, если первые два AT, то смотрим дальше. Вот это условие при одинаковых входных данных срабатывает не всегда. И Switch-case тоже срабатывает не всегда, при одинаковых входных данных. Вопрос - почему такое может быть? |
а что мешает вам добавить немного обратной связи? выводите ваш буфер обратно (с целью отладки), будете знать что там у вас лежит.
и я бы посоветовал комманду заканчивать |
Цитата:
|
да и не думал вообще-то. Подскажите вот у вас в программе:
((cmd[0]==65)and(cmd[1]==84)) я правильно понимаю что начало команды вы хотите увидеть обязательно в первом элементе массива? |
Цитата:
потому что это и предполагается. вот когда это условие срабатывает - необязательно срабатывает следующее условие проверки элементов массива, будто он где-то повреждается. |
Часовой пояс GMT +4, время: 03:10. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot