Fixed SPI mode with LoRa32u4 II
This commit is contained in:
2
.vscode/arduino.json
vendored
2
.vscode/arduino.json
vendored
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"board": "bsfrance:avr:lora32u4",
|
||||
"sketch": "crossbow.ino",
|
||||
"port": "COM23",
|
||||
"port": "COM15",
|
||||
"output": "./build"
|
||||
}
|
||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"variables.h": "c"
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/build": true
|
||||
}
|
||||
}
|
||||
94
crossbow.ino
94
crossbow.ino
@@ -8,17 +8,30 @@ TODO
|
||||
* Some kind of alarm when RSSI goes LOW
|
||||
* ability for RX and TX to change frequency
|
||||
* serial passtrough (?)
|
||||
FIXME
|
||||
|
||||
* RX canTransmit is always false. For unknown reason first received frame does not enables it
|
||||
|
||||
*/
|
||||
#include <LoRa.h>
|
||||
#include "variables.h"
|
||||
#include "qsp.h"
|
||||
|
||||
#define DEBUG_SERIAL
|
||||
#define DEBUG_LED
|
||||
#define WAIT_FOR_SERIAL
|
||||
|
||||
// #define LORA_HARDWARE_SERIAL
|
||||
#define LORA_HARDWARE_SPI
|
||||
|
||||
// #define DEVICE_MODE_TX
|
||||
#define DEVICE_MODE_RX
|
||||
#define DEVICE_MODE_TX
|
||||
// #define DEVICE_MODE_RX
|
||||
|
||||
// LoRa32u4 ports
|
||||
#define SS 8
|
||||
#define RST 4
|
||||
#define DI0 7
|
||||
|
||||
|
||||
int ppm[PPM_CHANNEL_COUNT] = {0};
|
||||
|
||||
@@ -30,8 +43,6 @@ int ppm[PPM_CHANNEL_COUNT] = {0};
|
||||
#include <PPMReader.h>
|
||||
PPMReader ppmReader(PPM_INPUT_PIN, PPM_INPUT_INTERRUPT);
|
||||
|
||||
bool canTransmit = true;
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -39,12 +50,10 @@ bool canTransmit = true;
|
||||
*/
|
||||
#ifdef DEVICE_MODE_RX
|
||||
|
||||
#include <Adafruit_SSD1306.h>
|
||||
// #include <Adafruit_SSD1306.h>
|
||||
|
||||
#define OLED_RESET 4
|
||||
Adafruit_SSD1306 display(OLED_RESET);
|
||||
|
||||
bool canTransmit = false;
|
||||
// #define OLED_RESET 4
|
||||
// Adafruit_SSD1306 display(OLED_RESET);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -118,6 +127,8 @@ void radioPacketStart(void)
|
||||
void radioPacketEnd(void)
|
||||
{
|
||||
LoRa.endPacket();
|
||||
//After ending packet, put device into receive mode again
|
||||
LoRa.receive();
|
||||
}
|
||||
|
||||
void writeToRadio(uint8_t dataByte, QspConfiguration_t *qsp)
|
||||
@@ -154,27 +165,48 @@ void setup(void)
|
||||
#endif
|
||||
|
||||
#ifdef LORA_HARDWARE_SPI
|
||||
Serial.begin(115200);
|
||||
|
||||
#ifdef WAIT_FOR_SERIAL
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.println("Start");
|
||||
#endif
|
||||
|
||||
LoRa.setPins(SS,RST,DI0);
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.println("Pins Set");
|
||||
#endif
|
||||
if (!LoRa.begin(868E6))
|
||||
{
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.println("LoRa init failed. Check your connections.");
|
||||
while (true)
|
||||
;
|
||||
#endif
|
||||
while (true);
|
||||
}
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.println("Init done");
|
||||
#endif
|
||||
LoRa.onReceive(onReceive);
|
||||
LoRa.receive();
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.println("Receive mode enabled");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DEVICE_MODE_RX
|
||||
pinMode(PIN_LED, OUTPUT);
|
||||
|
||||
/*
|
||||
* 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();
|
||||
// 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 < PPM_CHANNEL_COUNT; i++)
|
||||
@@ -196,6 +228,12 @@ void setup(void)
|
||||
sei();
|
||||
|
||||
#endif
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
// #ifdef DEVICE_MODE_TX
|
||||
qsp.canTransmit = true;
|
||||
// #endif
|
||||
}
|
||||
|
||||
#ifdef DEVICE_MODE_RX
|
||||
@@ -292,13 +330,29 @@ void loop(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (canTransmit && transmitPayload)
|
||||
if (qsp.canTransmit && transmitPayload)
|
||||
{
|
||||
transmitPayload = false;
|
||||
|
||||
|
||||
radioPacketStart();
|
||||
qspEncodeFrame(&qsp);
|
||||
radioPacketEnd();
|
||||
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.print("Packet frame ");
|
||||
Serial.print(qsp.frameToSend);
|
||||
Serial.println(" sent");
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_LED
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
delay(10);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
delay(70);
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
delay(10);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
19
qsp.cpp
19
qsp.cpp
@@ -201,10 +201,10 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
|
||||
if (qsp->crc == incomingByte) {
|
||||
//CRC is correct
|
||||
|
||||
#ifdef DEVICE_MODE_RX
|
||||
#ifdef DEVICE_MODE_RX
|
||||
//If devide received a valid frame, that means it can start to talk
|
||||
canTransmit = true;
|
||||
#endif
|
||||
qsp->canTransmit = true;
|
||||
#endif
|
||||
|
||||
//Store the last timestamp when frame was received
|
||||
if (frameId < QSP_FRAME_COUNT) {
|
||||
@@ -213,6 +213,19 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
|
||||
|
||||
qsp->lastReceivedPacketId = packetId;
|
||||
|
||||
#ifdef DEBUG_SERIAL
|
||||
Serial.print("Frame ");
|
||||
Serial.print(frameId);
|
||||
Serial.println(" received");
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_LED
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
delay(10);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
delay(100);
|
||||
#endif
|
||||
|
||||
switch (frameId) {
|
||||
case QSP_FRAME_RC_DATA:
|
||||
qspDecodeRcDataFrame(qsp, ppm);
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
#define QSP_FRAME_SET_RX_CONFIG 0x4
|
||||
#define QSP_FRAME_COUNT 0x5
|
||||
|
||||
#define PIN_LED 13
|
||||
|
||||
enum dataStates {
|
||||
QSP_STATE_IDLE,
|
||||
QSP_STATE_PREAMBLE_RECEIVED,
|
||||
@@ -57,6 +55,7 @@ struct QspConfiguration_t {
|
||||
uint8_t deviceState = DEVICE_STATE_OK;
|
||||
void (* hardwareWriteFunction)(uint8_t, QspConfiguration_t*);
|
||||
uint8_t lastReceivedPacketId = 0;
|
||||
bool canTransmit = false;
|
||||
};
|
||||
|
||||
struct RxDeviceState_t {
|
||||
|
||||
Reference in New Issue
Block a user