close #10
This commit is contained in:
73
crossbow.ino
73
crossbow.ino
@@ -3,8 +3,10 @@
|
||||
#define DEVICE_MODE_TX
|
||||
// #define DEVICE_MODE_RX
|
||||
|
||||
#define DEBUG_SERIAL
|
||||
// #define DEBUG_PING_PONG
|
||||
#define FEATURE_TX_OLED
|
||||
|
||||
// #define DEBUG_SERIAL
|
||||
#define DEBUG_PING_PONG
|
||||
// #define DEBUG_LED
|
||||
// #define WAIT_FOR_SERIAL
|
||||
|
||||
@@ -25,14 +27,17 @@ int ppm[16] = {0};
|
||||
* Main defines for device working in TX mode
|
||||
*/
|
||||
#ifdef DEVICE_MODE_TX
|
||||
|
||||
// #define OLED_RESET -1
|
||||
#include <PPMReader.h>
|
||||
// #include <Adafruit_SSD1306.h>
|
||||
|
||||
PPMReader ppmReader(PPM_INPUT_PIN, PPM_INPUT_INTERRUPT, true);
|
||||
// PPMReader ppmReader(11, 2, MODE_PIN_CHANGE_INTERRUPT);
|
||||
// Adafruit_SSD1306 display(OLED_RESET);
|
||||
|
||||
#ifdef FEATURE_TX_OLED
|
||||
|
||||
#define OLED_RESET -1
|
||||
#include <Adafruit_SSD1306.h>
|
||||
Adafruit_SSD1306 display(OLED_RESET);
|
||||
uint32_t lastOledTaskTime = 0;
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -143,15 +148,6 @@ void setup(void)
|
||||
#endif
|
||||
|
||||
#ifdef DEVICE_MODE_RX
|
||||
/*
|
||||
* Initialize OLED display
|
||||
*/
|
||||
// display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
|
||||
// display.setTextSize(1);
|
||||
// display.setTextColor(WHITE);
|
||||
// display.clearDisplay();
|
||||
// display.display();
|
||||
|
||||
//initiallize default ppm values
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
@@ -169,6 +165,15 @@ void setup(void)
|
||||
TCCR1A = 0; //reset timer1
|
||||
TCCR1B = 0;
|
||||
TCCR1B |= (1 << CS11); //set timer1 to increment every 0,5 us or 1us on 8MHz
|
||||
|
||||
#ifdef FEATURE_TX_OLED
|
||||
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.clearDisplay();
|
||||
display.display();
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
@@ -231,6 +236,40 @@ void loop(void)
|
||||
|
||||
#ifdef DEVICE_MODE_TX
|
||||
|
||||
#ifdef FEATURE_TX_OLED
|
||||
if (
|
||||
currentMillis - lastOledTaskTime > OLED_UPDATE_RATE
|
||||
) {
|
||||
lastOledTaskTime = currentMillis;
|
||||
|
||||
display.clearDisplay();
|
||||
|
||||
display.setTextColor(WHITE, BLACK);
|
||||
display.setCursor(0, 0);
|
||||
display.print("TX RSSI: ");
|
||||
display.print(map(getRadioRssi(), 0, 255, 0, 100));
|
||||
|
||||
display.setCursor(0, 12);
|
||||
display.print("TX SNR: ");
|
||||
display.print(getRadioSnr());
|
||||
|
||||
display.setCursor(0, 24);
|
||||
display.print("RX RSSI: ");
|
||||
display.print(map(rxDeviceState.rssi, 0, 255, 0, 100));
|
||||
|
||||
display.setCursor(0, 36);
|
||||
display.print("RX SNR: ");
|
||||
display.print(rxDeviceState.snr);
|
||||
|
||||
display.setCursor(0, 46);
|
||||
display.print("Roundtrip: ");
|
||||
display.print(rxDeviceState.roundtrip);
|
||||
|
||||
display.display();
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_PING_PONG
|
||||
//PING frame
|
||||
if (
|
||||
|
||||
15
qsp.cpp
15
qsp.cpp
@@ -256,18 +256,13 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
|
||||
break;
|
||||
|
||||
case QSP_FRAME_PONG:
|
||||
if (qsp->debugConfig & DEBUG_FLAG_SERIAL) {
|
||||
rxDeviceState->roundtrip = qsp->payload[0];
|
||||
rxDeviceState->roundtrip += (uint32_t) qsp->payload[1] << 8;
|
||||
rxDeviceState->roundtrip += (uint32_t) qsp->payload[2] << 16;
|
||||
rxDeviceState->roundtrip += (uint32_t) qsp->payload[3] << 24;
|
||||
|
||||
uint32_t incoming = 0;
|
||||
rxDeviceState->roundtrip = (micros() - rxDeviceState->roundtrip) / 1000;
|
||||
|
||||
incoming = qsp->payload[0];
|
||||
incoming += (uint32_t) qsp->payload[1] << 8;
|
||||
incoming += (uint32_t) qsp->payload[2] << 16;
|
||||
incoming += (uint32_t) qsp->payload[3] << 24;
|
||||
|
||||
Serial.print("Rountrip: ");
|
||||
Serial.println((micros() - incoming) / 1000);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#define OLED_UPDATE_RATE 300
|
||||
|
||||
#define SBUS_UPDATE_RATE 15 //ms
|
||||
#define SBUS_PACKET_LENGTH 25
|
||||
|
||||
@@ -9,11 +11,11 @@
|
||||
#define RX_TASK_HEALTH 200 //5Hz should be enough
|
||||
#define RSSI_CHANNEL 11
|
||||
|
||||
#define RX_RX_HEALTH_FRAME_RATE 500
|
||||
#define RX_RX_HEALTH_FRAME_RATE 503
|
||||
#define TX_RC_FRAME_RATE 50 //ms
|
||||
#define RX_FAILSAFE_DELAY (TX_RC_FRAME_RATE * 8)
|
||||
|
||||
#define TX_PING_RATE 2000
|
||||
#define TX_PING_RATE 2007
|
||||
|
||||
#define CHANNEL_ID 0x01
|
||||
#define QSP_PREAMBLE 0x51
|
||||
@@ -90,4 +92,5 @@ struct RxDeviceState_t {
|
||||
uint8_t rxVoltage = 0;
|
||||
uint8_t a1Voltage = 0;
|
||||
uint8_t a2Voltage = 0;
|
||||
uint32_t roundtrip = 0;
|
||||
};
|
||||
Reference in New Issue
Block a user