Я написал эскиз Arduino, который считывает данные с приемника удаленного управления и возвращает значение от 0 до 1023 для этого канала. Я в основном хочу отправить эти данные (что-то в формате канала: значение, например, Channel 1: 1023, Channel 2: 511) в программу ПК (которую я планирую написать сам).Лучший способ передать переменные между Arduino и ПК через последовательный порт?
Самый эффективный способ, которым я могу это сделать, - использовать два байта данных, причем первые 6 бит представляют канал (2^6 = 64 возможных канала, путь больше, чем мне нужно), и последние десять представляя значение (2^10 = 1024, совершенное). Но я не уверен, что лучше всего реализовать это на C++, или если это даже самый лучший способ сделать это. Итак:
- Каков наилучший способ создания отдельных байтов и работы с двоичными числами на C++? Предпочтительно хранить значения в памяти как таковые (т. Е. Нет массивов bool, где каждый индекс занимает свой собственный байт). Два байта данных более чем достаточно для того, что мне нужно.
- Является ли это самым простым/простейшим/наиболее эффективным/рекомендуемым способом реализации того, чего я пытаюсь достичь? Я в основном хочу передавать переменные, как между программами, есть ли другие способы сделать это?
Итак, я бы использовал битовые поля, создал объединение с байтовым массивом, а затем прочитал данные «через» массив байтов? Я раньше не использовал битовые поля, поэтому, чтобы прояснить, если я объявляю что-то вроде int myInt: 6, это определит целое число с 2^6 возможными значениями? То же самое с 2^10? –
Итак, я реализовал это на моем конце, но я получаю неожиданное поведение. Кажется, что эти байты печатаются и читаются правильно, поэтому, скорее всего, это не проблема с тем, как я реализовал это решение, но в другом месте моего кода. Чтобы помочь устранить неполадки, есть ли какие-либо проблемы с этим, о которых я должен знать? Например, есть ли какое-либо смещение битов, которое я должен выполнять при назначении переменных, являются ли члены, не упакованные рядом друг с другом в память и т. Д.? –
Кроме того, для контрольной суммы я просто XORed два байта вместе (я понял, что это будет самый простой для двух байтов данных). Любые советы, если это хороший метод? –