An example project for the Heltec Turtle LoRa board (STM32L4 and SX1276 chips). The projects is only supported for the Nucleo-L432KC board platform in the mbed online and offline compiler environment. Visit www.radioshuttle.de (choose Turtle board) for instructions. Note that most source files and libraries are open source, however some files especially the RadioShuttle core protocol is copyrighted work. Check header for details.

Dependencies:   mbed BufferedSerial SX1276GenericLib OLED_SSD1306 HELIOS_Si7021 NVProperty RadioShuttle-STM32L4 USBDeviceHT

Committer:
Helmut Tschemernjak
Date:
Sun Feb 03 13:03:46 2019 +0100
Revision:
18:d2f227e0a8bf
Parent:
13:3c7a52b11316
Child:
22:9cca40fcb25e
Added property editor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:3b6c2ce051a6 1 /*
Helmut Tschemernjak 3:b5052f3fa638 2 * Copyright (c) 2019 Helmut Tschemernjak
Helmut64 0:3b6c2ce051a6 3 * 30826 Garbsen (Hannover) Germany
Helmut64 0:3b6c2ce051a6 4 * Licensed under the Apache License, Version 2.0);
Helmut64 0:3b6c2ce051a6 5 */
Helmut Tschemernjak 3:b5052f3fa638 6
Helmut Tschemernjak 3:b5052f3fa638 7 /*
Helmut Tschemernjak 3:b5052f3fa638 8 * TODO:
Helmut Tschemernjak 3:b5052f3fa638 9 * Compiler Date/Time is not set correctly on startup
Helmut Tschemernjak 3:b5052f3fa638 10 */
Helmut Tschemernjak 3:b5052f3fa638 11 #include "main.h"
Helmut Tschemernjak 3:b5052f3fa638 12 #include "RadioShuttle.h"
Helmut Tschemernjak 3:b5052f3fa638 13 #include "RadioTest.h"
Helmut Tschemernjak 3:b5052f3fa638 14 #include "GenericPingPong.h"
Helmut Tschemernjak 9:a988aa7a4652 15 #ifdef FEATURE_NVPROPERTY
Helmut Tschemernjak 9:a988aa7a4652 16 #include <NVPropertyProviderInterface.h>
Helmut Tschemernjak 9:a988aa7a4652 17 #include "NVProperty.h"
Helmut Tschemernjak 9:a988aa7a4652 18 #endif
Helmut64 0:3b6c2ce051a6 19
Helmut Tschemernjak 3:b5052f3fa638 20 DigitalOut statusLED(LED);
Helmut Tschemernjak 3:b5052f3fa638 21 DigitalOut redLED(LED2);
Helmut Tschemernjak 3:b5052f3fa638 22 InterruptIn buttonIntr(USER_BUTTON);
Helmut Tschemernjak 13:3c7a52b11316 23 volatile int pressedCount;
Helmut64 0:3b6c2ce051a6 24
Helmut Tschemernjak 3:b5052f3fa638 25 void switchInput(void) {
Helmut Tschemernjak 3:b5052f3fa638 26 InterrruptMSG(INT_BUTTON1);
Helmut Tschemernjak 3:b5052f3fa638 27 }
Helmut64 0:3b6c2ce051a6 28
Helmut64 0:3b6c2ce051a6 29
Helmut Tschemernjak 3:b5052f3fa638 30 void timerUpdate(void) {
Helmut Tschemernjak 5:c6a960febe80 31 static LowPowerTimeout timeout;
Helmut Tschemernjak 3:b5052f3fa638 32 if (redLED == 0)
Helmut Tschemernjak 3:b5052f3fa638 33 timeout.attach_us(&timerUpdate, 20000); // setup to call timerUpdate after 20 millis
Helmut Tschemernjak 3:b5052f3fa638 34 else
Helmut Tschemernjak 3:b5052f3fa638 35 timeout.attach_us(&timerUpdate, 2000000); // setup to call timerUpdate after 2 seconds
Helmut Tschemernjak 3:b5052f3fa638 36
Helmut Tschemernjak 3:b5052f3fa638 37 InterrruptMSG(INT_TIMEOUT);
Helmut Tschemernjak 3:b5052f3fa638 38 }
Helmut Tschemernjak 3:b5052f3fa638 39
Helmut Tschemernjak 18:d2f227e0a8bf 40
Helmut64 0:3b6c2ce051a6 41 int main() {
Helmut64 0:3b6c2ce051a6 42 /*
Helmut64 0:3b6c2ce051a6 43 * inits the Serial or USBSerial when available (230400 baud).
Helmut64 0:3b6c2ce051a6 44 * If the serial uart is not is not connected it swiches to USB Serial
Helmut64 0:3b6c2ce051a6 45 * blinking LED means USBSerial detected, waiting for a connect.
Helmut64 0:3b6c2ce051a6 46 * It waits up to 30 seconds for a USB terminal connections
Helmut64 0:3b6c2ce051a6 47 */
Helmut Tschemernjak 3:b5052f3fa638 48 InitSerial(30*1000, &statusLED);
Helmut Tschemernjak 3:b5052f3fa638 49 dprintf("Welcome to RadioShuttle v%d.%d", RS_MAJOR, RS_MINOR);
Helmut Tschemernjak 3:b5052f3fa638 50 dprintf("Voltage: %.2f (%s powered)", BatteryVoltage(), BatterySource());
Helmut Tschemernjak 9:a988aa7a4652 51
Helmut Tschemernjak 18:d2f227e0a8bf 52 #ifdef FEATURE_NVPROPERTYEDITOR
Helmut Tschemernjak 18:d2f227e0a8bf 53 // NVPropertyEditor();
Helmut Tschemernjak 18:d2f227e0a8bf 54 #endif
Helmut Tschemernjak 3:b5052f3fa638 55
Helmut Tschemernjak 3:b5052f3fa638 56 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 57 InitRadio();
Helmut Tschemernjak 3:b5052f3fa638 58 #endif
Helmut Tschemernjak 3:b5052f3fa638 59 #ifdef FEATURE_LORA_PING_PONG
Helmut Tschemernjak 3:b5052f3fa638 60 DeInitRadio();
Helmut Tschemernjak 3:b5052f3fa638 61 SX1276PingPong(); // basic LoRa raw ping/pong without RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 62 #endif
Helmut Tschemernjak 3:b5052f3fa638 63 dprintf("InitDefaults Done");
Helmut Tschemernjak 3:b5052f3fa638 64 timerUpdate(); // start timer
Helmut Tschemernjak 3:b5052f3fa638 65 #if defined (USER_BUTTON_RISE) // attach switchInput function to the rising or falling edge
Helmut Tschemernjak 3:b5052f3fa638 66 buttonIntr.rise(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 67 #else
Helmut Tschemernjak 3:b5052f3fa638 68 buttonIntr.fall(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 69 #endif
Helmut Tschemernjak 3:b5052f3fa638 70
Helmut Tschemernjak 3:b5052f3fa638 71 /*
Helmut Tschemernjak 3:b5052f3fa638 72 * Main event loop, process interrupts and go to sleep
Helmut Tschemernjak 3:b5052f3fa638 73 * the green statusLED indicates CPU activity
Helmut Tschemernjak 5:c6a960febe80 74 * the red redLED indicates that low power timeout function is running.
Helmut Tschemernjak 3:b5052f3fa638 75 */
Helmut Tschemernjak 3:b5052f3fa638 76 while(true) {
Helmut Tschemernjak 3:b5052f3fa638 77 while ((readPendingInterrupts() == 0)) {
Helmut Tschemernjak 3:b5052f3fa638 78 statusLED = 0;
Helmut Tschemernjak 3:b5052f3fa638 79 if (!(usb && usb->connected()))
Helmut Tschemernjak 3:b5052f3fa638 80 sleep();
Helmut Tschemernjak 3:b5052f3fa638 81 statusLED = 1;
Helmut Tschemernjak 3:b5052f3fa638 82 }
Helmut Tschemernjak 3:b5052f3fa638 83
Helmut Tschemernjak 3:b5052f3fa638 84 uint32_t pendirqs = readclrPendingInterrupts();
Helmut Tschemernjak 3:b5052f3fa638 85 if (pendirqs & INT_BUTTON1) {
Helmut Tschemernjak 3:b5052f3fa638 86 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 87 statusLED = !statusLED;
Helmut Tschemernjak 3:b5052f3fa638 88 RadioUpdate(true); // pass the pressed user button to RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 89 #endif
Helmut Tschemernjak 3:b5052f3fa638 90 }
Helmut Tschemernjak 3:b5052f3fa638 91 if (pendirqs & INT_LORA) {
Helmut Tschemernjak 3:b5052f3fa638 92 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 93 RadioUpdate(false);
Helmut Tschemernjak 3:b5052f3fa638 94 #endif
Helmut Tschemernjak 3:b5052f3fa638 95 }
Helmut Tschemernjak 3:b5052f3fa638 96 if (pendirqs & INT_TIMEOUT) {
Helmut Tschemernjak 3:b5052f3fa638 97 redLED = ! redLED;
Helmut Tschemernjak 3:b5052f3fa638 98 }
Helmut Tschemernjak 3:b5052f3fa638 99 }
Helmut64 0:3b6c2ce051a6 100 }