#arrays #arduino #serial-port #byte #bit
#массивы #arduino #последовательный порт #байт #бит
Вопрос:
Я использую Teensy 3.2
и Teensyduino
для чтения в UART
сигнале, состоящем из 6 bytes
данных. Для каждого байта я хотел бы присвоить каждому из битов позицию в массиве 1×7. Например, допустим, я прочитал в 1-м байте = 01110101
. Я хотел бы массив, который исключает самый значимый бит (0) и выглядит следующим образом 1110101
Ниже приведено то, что я написал для чтения данных, и это работает как по волшебству. Это значения, которые в настоящее время хранятся в каждом элементе byteArray
, которые я хотел бы преобразовать в отдельные array
, как описано.
Я искал высоко и низко, поэтому, если бы вы могли указать мне правильное направление, я был бы вечно благодарен. Мне не обязательно просто нужен ответ, но я понятия не имею, как двигаться дальше в данный момент. Есть ли способ индексировать определенные биты в байте, аналогичный индексации позиций в массиве?
#define PEESerial Serial2
byte byte1, byte2, byte3, byte4, byte5, byte6;
unsigned long period;
byte byteArray[6];
int count=0;
void setup() {
//Set the primary Serial (USB Serial)
Serial.begin(9600);
// Set the pin Serial - known value based on transmitted signal Baud Rate
PEESerial.begin(1200);
}
void loop() {
// read from port 9 (serial2 Rx) IF there
// is a signal to read.
if (Serial2.available()amp;amp; count<6) {
byteArray[count] = PEESerial.read();
Serial.println(byteArray[count],HEX);
Serial.println(byteArray[count],BIN);
count ;
}
else {
count=0;
}
}
Комментарии:
1. Вы хотите сохранить
7bit
данные в каждом элементеbyteArray
? Я немного смущен тем, что вы пытаетесь сделать.2. да, это правильно. Я хочу сохранить их каждый бит в свой собственный элемент массива. Я собираюсь посмотреть, не смогу ли я разобраться со сдвигом и маскировкой, поскольку я считаю, что это может быть единственным способом извлечения битов. Я надеялся, что существует более простой синтаксис или метод извлечения, но некоторые другие отзывы, которые я получил, ускользнули от того факта, что простого способа извлечения битов из байта данных не существует.
3. Ваши данные будут содержать минимум
8 bits
иMost Significant bit
это не повлияет на данные, если они есть0
, чтобы убедиться, что они есть0
,And
вашbyte
с127
или его двоичное представление0b01111111
с помощьюamp;
оператора. Ваше утверждение должно выглядеть следующим образом:byteArray[count] = 0b0000000 amp; yourData
4. Я допустил опечатку, сейчас не могу редактировать. Ваше утверждение должно выглядеть как
byteArray[count] = 0b01111111 amp; yourData
илиbyteArray[count] = 127 amp; yourData