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