В порт прилетает массив, как принять и разобрать на переменные
- Войдите на сайт для отправки комментариев
Сб, 05/03/2022 - 01:00
Добрый день! Написал прогу в андройд студио. Она по таймеру отправляет данные акселерометра (от -100 до 100 по двум осям). Отправка осуществляется массивом
byte[] bytesToSend = { (byte)plane_y, (byte)plane_x };
myThreadConnected.write(bytesToSend);
Сейчас не могу разобраться со стороной приема. Скетч сейчас такой. В мониторе порта выходит по две строчки с нужными числами. Как мне их правильно принимать и разложить в переменные, x и y например? (если я не ошибаюсь, то писать просто в int неверно). С массивом что-то не выходит.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int inbyte;
void setup()
{
Serial.begin(9600); // Старт порта на скорости
mySerial.begin(9600); // Старт виртуального порта
}
void loop() {
if (mySerial.available())
{
inbyte = mySerial.read();
Serial.write(inbyte);
Serial.println(inbyte, DEC);
};
}
Приходит два байта. Читаем их по очереди в int8_t plane_x и int8_t plane_y
а синхронизируешь последовательность чем? как будешь отличать байты? нужно придумать протокол или взять готовый, к примеру в протоколе YAESU идет байт кода команды и далее два байта данные
В том и дело, что в этом пока не преуспел. У меня собственно летят координаты, поэтому я отправил два числа. Вот например Андройд не смешивает же, я в мониторе порта стабильно вижу две строчки.
Начитался много об этом в тырнете, но пока не разобрался. О парсинга порта, спецсимволах, чтение структуры и тп. Есть еще обда проблема, я указал, что все гуд, но разбираюсь еще.. Отрицательные числа вместо -1,-2,-3, превращаются в 243,244 и тп
Отрицательные числа вместо -1,-2,-3, превращаются в 243,244 и тп
тогда переменная должна быть не byte а int8_t
дадада, действует уффф пошли минуса)))
осталось в переменные распихать)))
дадада, действует уффф пошли минуса)))
осталось в переменные распихать)))
нужна преамбула, хотя бы один байт с нулевым значением к примеру, как начало блока данных
понял, пока до преамбулы не добрался, пробую такой способ. Явно удается определить, что символов два приходит, а дальше не идет( пытаюсь x вывести. Реально таким способом? Может ошибок наляпал..
#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX int8_t inbuf[2]; // буфер int x, y; //для вывода переменных int ksim = 0; //кол-во входящих символов void setup() { Serial.begin(9600); // Старт порта на скорости mySerial.begin(9600); // Старт виртуального порта } void loop() { for (int i=0; i<2; i++){ inbuf[i] = 0; ksim = mySerial.available(); delay(100); if(ksim > 0){ for(int i=1; i<=ksim; i++){ inbuf[i] = mySerial.read(); } } } x = inbuf[0]; y = inbuf[1]; Serial.println(inbuf [1], DEC); }Нереально. Softserial, delay... Ядерная смесь.