encoding of RC_DATA frame
This commit is contained in:
44
crossbow.ino
44
crossbow.ino
@@ -163,6 +163,18 @@ void setup(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEVICE_MODE_TX
|
||||||
|
|
||||||
|
uint8_t get10bitHighShift(uint8_t channel) {
|
||||||
|
return (2 + (channel * 2)) % 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t get10bitLowShift(uint8_t channel) {
|
||||||
|
return 8 - get10bitHighShift(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
void loop(void) {
|
void loop(void) {
|
||||||
|
|
||||||
#ifdef DEVICE_MODE_TX
|
#ifdef DEVICE_MODE_TX
|
||||||
@@ -184,22 +196,12 @@ void loop(void) {
|
|||||||
uint8_t channelValue8 = map(ppmReader.get(i), 1000, 2000, 0, 255) & 0xff;
|
uint8_t channelValue8 = map(ppmReader.get(i), 1000, 2000, 0, 255) & 0xff;
|
||||||
uint8_t channelValue4 = map(ppmReader.get(i), 1000, 2000, 0, 15) & 0x0f;
|
uint8_t channelValue4 = map(ppmReader.get(i), 1000, 2000, 0, 15) & 0x0f;
|
||||||
|
|
||||||
if (i == 0) {
|
if (i < 4) {
|
||||||
qspPayload[0] |= (channelValue10 >> 2) & B11111111; //255
|
uint8_t bitIndex = i + (i / 4);
|
||||||
qspPayload[1] |= (channelValue10 << 6) & B11000000; //192
|
qspPayload[bitIndex] |= (channelValue10 >> get10bitHighShift(i)) & (0x03ff >> get10bitHighShift(i)); //255 | shift right 2 bits
|
||||||
} else if (i == 1) {
|
qspPayload[bitIndex + 1] |= (channelValue10 << get10bitLowShift(i)) & 0xff << (8 - get10bitHighShift(i)); //192 | shift left 6 bits
|
||||||
qspPayload[1] |= (channelValue10 >> 4) & B00111111; //63
|
} else if (i == 4 || i == 5) {
|
||||||
qspPayload[2] |= (channelValue10 << 4) & B11110000; //240
|
qspPayload[i + 1] |= channelValue8;
|
||||||
} else if (i == 2) {
|
|
||||||
qspPayload[2] |= (channelValue10 >> 6) & B00001111; //15
|
|
||||||
qspPayload[3] |= (channelValue10 << 2) & B11111100; //252
|
|
||||||
} else if (i == 3) {
|
|
||||||
qspPayload[3] |= (channelValue10 >> 8) & B00000011; //3
|
|
||||||
qspPayload[4] |= channelValue10 & B11111111; //255
|
|
||||||
} else if (i == 4) {
|
|
||||||
qspPayload[5] |= channelValue8;
|
|
||||||
} else if (i == 5) {
|
|
||||||
qspPayload[6] |= channelValue8;
|
|
||||||
} else if (i == 6) {
|
} else if (i == 6) {
|
||||||
qspPayload[7] |= (channelValue4 << 4) & B11110000;
|
qspPayload[7] |= (channelValue4 << 4) & B11110000;
|
||||||
} else if (i == 7) {
|
} else if (i == 7) {
|
||||||
@@ -218,16 +220,6 @@ void loop(void) {
|
|||||||
Serial.begin(UART_SPEED);
|
Serial.begin(UART_SPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
uint8_t pp[4] = {0x41, 0x42, 0x43, 0x44};
|
|
||||||
|
|
||||||
encodeQspFrame(0x01, 0x04, pp);
|
|
||||||
|
|
||||||
Serial.end();
|
|
||||||
delay(30);
|
|
||||||
Serial.begin(UART_SPEED);
|
|
||||||
delay(1000);
|
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEVICE_MODE_RX
|
#ifdef DEVICE_MODE_RX
|
||||||
|
|||||||
Reference in New Issue
Block a user