Отправить int16_t через COM port
- Войдите на сайт для отправки комментариев
Добрый день. Сразу оговорюсь, что под COM портом подразумевается блютуз. Не думаю, что это как-то повлияет, но все-таки.
Дело вот в чем. Я с датчика получаю данные ускорения и угловой скорости по трем осям. Итого у меня выходит 6 значений(если еще температуру добавить, то 7). На компьютере работает принимающая программа, которая рисует трехмерную картинку(Авиа горизонт, температуру за бортом.) Дело в том, что все это работает, только отдельно друг от друга. Программа показывает авиа горизонт по искусственным данным, а нужно получать их от arduno. Принимаемые от GY-521 данные хранятся в шести переменных типа int16_t. Я не думал, то это окажется самой сложной проблемой, но я не могу их нормально отправить через Serial.write(). А косяк вот в чем: если написать:
void setup() { Serial.begin(9600); } //char * buf1[6] = (char) buf; void loop() { int buf = 0xFFFFFFFF; for (long int i=0;i<=0xFFFFFFFF;i++) { Serial.write((long int) i); delay(50); } }
Он отправляет раз в 50 миллисекунд один байт. Именно байт. Не лонг инт. Соответственно в мониторе порта я вижу всю последовательность ASCII символов.
Вопрос такой, как отправить на компьютер 7 переменных типа int16_t? Само собой, все должно дойти в сохранности.
Преобразовать все int16_t в массив байтов и последовательно побайтно передать их в сериал, на приемной стороне обратное преобразование.
vladislav131, подскажите пожалуйста, как потом на компе собрать этот int обратно из байт. Желательно на С++
vladislav131, подскажите пожалуйста, как потом на компе собрать этот int обратно из байт. Желательно на С++
думаю как вариант :
еще вариант,как мне кажеться самый правдоподобный :
Правилом хорошего тона является разделение передаваемых слов каким либо ключемым символом маркером(если не заморачиваться на CRC). На компе буфер большой, его переполнение редкость, а вот со стороны контроллера такое случается, причём в самый неожиданный момент. Потому передача данных должна включать в себя формирование строки с ключами, а со стороны компа разбивать её по ключам. Обычно ключём является символ новой строки.
Я бы лучше передавал число строкой, тогда и ключи будет легче найти и гарантия от случая, когда байт с куском числа совпадет с кодом ключа.
Пример NMEA. Идею и требования описывает полность. Годится для любых низкоскоростных данных.