Семпаи реактора, поделитесь мудростью.
Пишу прогу на C++ для управления всякой дичью (2 шаговика, и измерительный АЦП, и прочая дичь по мелочи). Выбрал ардуину для управления устройствами, а сама ардуина получает команды от компа и выполняет их, подключается по USB (сигналами обмениваются в обе стороны). ибо думаю что, для всех алгоритмов обработки данных, полученных с устройства и правил их обработки, может не хватить памяти на ардуине). А как исключить ардуину из этой схемы я не очень понимаю.
Десктопная приложуха пишется на Qt (хочу запилить на линуксе, ак думаю меньше проблем), используется библиотека QserialPort (ранее называлась Qserialdevice) для связи. Связь их мне видится примерно такой: При подтверждении отправки команды формируется строка (символы и цифры норм передаются, поэтому ебаться с кодированием не вижу смысла. посему использую буквы и цифры по максимуму) типа: КЧ\ИК_0/арг1\ИК_1/арг1/арг2\0
Пример реальной команды "11L/1\R/1\0" - включить led(светодиод), отправить сопротивление подстроечного резистора на комп.
где:
КЧ - контрольное число, для проверки, если не совпадает с длинной строки то значит команда пришла не полностью или с ошибкой.
ИК- идентификатор команды - одна большая буква
арг - аргументы, может быть несколько. в зависимости от того что хочешь. например может быть одна и та же буква но разное количество аргументов. тогда будет применяться перегрузка(выглядит как ужасный говнокод swich в котором другие свичи. как сделать красиво и хорошо я хуй его знает. из патернов знаю только визитор)
\0 - конец строки.
была идея сделать таблицу команд что бы они обменивались для подтверждения получения только идентификаторами. и если какая-то команда была пропущена то ардуина поймёт что порядок нарушен и запросит повтор команды. (но это мне кажется ебалой которая только память съест.
собсна к главному вопросу. что я делаю не так, какие предложения могут быть для улучшения/ускорения/итд, как лучше обменивать данные и команды. если есть варик напрямую управлять драйверами ШД, светодиодами, датчиками и тд то как это сделать?.
Также непонятки с частотой обмена данными, ставил маленькую- команды принимались кусками. на большой в начале выполнения ардуина ловит какие-то шумы и выводит "ppppppppp" на дисплейчик(что б понимать что она приняла), потом норм работает.
Как лучше организовать обратную связь? что бы были подтверждения получения команды.
Если кто либо занимался чем то подобным то поделитесь своей мудростью.
Отличный комментарий!