Fixed SPI mode with LoRa32u4 II

This commit is contained in:
Pawel Spychalski (DzikuVx)
2017-10-20 22:47:46 +02:00
parent 021decff98
commit 810abc14eb
5 changed files with 95 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
{
"board": "bsfrance:avr:lora32u4",
"sketch": "crossbow.ino",
"port": "COM23",
"port": "COM15",
"output": "./build"
}

View File

@@ -1,5 +1,8 @@
{
"files.associations": {
"variables.h": "c"
},
"files.exclude": {
"**/build": true
}
}

View File

@@ -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
View File

@@ -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);

View File

@@ -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 {