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:
Wed Feb 13 14:10:17 2019 +0100
Revision:
37:77fa81e4ad79
Parent:
35:9e799d093b7f
Child:
45:22bb680cad5a
Added a local RadioTestSample.cpp
Moved commands into RunCommands function
Added RunStartup function to provide proper startup messages

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 "RadioTest.h"
Helmut64 0:3b6c2ce051a6 13
Helmut Tschemernjak 34:d3d60dbb84ea 14
Helmut Tschemernjak 3:b5052f3fa638 15 DigitalOut statusLED(LED);
Helmut Tschemernjak 3:b5052f3fa638 16 DigitalOut redLED(LED2);
Helmut Tschemernjak 3:b5052f3fa638 17 InterruptIn buttonIntr(USER_BUTTON);
Helmut Tschemernjak 13:3c7a52b11316 18 volatile int pressedCount;
Helmut64 0:3b6c2ce051a6 19
Helmut Tschemernjak 3:b5052f3fa638 20 void switchInput(void) {
Helmut Tschemernjak 3:b5052f3fa638 21 InterrruptMSG(INT_BUTTON1);
Helmut Tschemernjak 3:b5052f3fa638 22 }
Helmut64 0:3b6c2ce051a6 23
Helmut Tschemernjak 3:b5052f3fa638 24 void timerUpdate(void) {
Helmut Tschemernjak 5:c6a960febe80 25 static LowPowerTimeout timeout;
Helmut Tschemernjak 3:b5052f3fa638 26 if (redLED == 0)
Helmut Tschemernjak 3:b5052f3fa638 27 timeout.attach_us(&timerUpdate, 20000); // setup to call timerUpdate after 20 millis
Helmut Tschemernjak 3:b5052f3fa638 28 else
Helmut Tschemernjak 3:b5052f3fa638 29 timeout.attach_us(&timerUpdate, 2000000); // setup to call timerUpdate after 2 seconds
Helmut Tschemernjak 3:b5052f3fa638 30
Helmut Tschemernjak 3:b5052f3fa638 31 InterrruptMSG(INT_TIMEOUT);
Helmut Tschemernjak 3:b5052f3fa638 32 }
Helmut Tschemernjak 3:b5052f3fa638 33
Helmut Tschemernjak 18:d2f227e0a8bf 34
Helmut Tschemernjak 34:d3d60dbb84ea 35
Helmut64 0:3b6c2ce051a6 36 int main() {
Helmut64 0:3b6c2ce051a6 37 /*
Helmut64 0:3b6c2ce051a6 38 * inits the Serial or USBSerial when available (230400 baud).
Helmut64 0:3b6c2ce051a6 39 * If the serial uart is not is not connected it swiches to USB Serial
Helmut64 0:3b6c2ce051a6 40 * blinking LED means USBSerial detected, waiting for a connect.
Helmut64 0:3b6c2ce051a6 41 * It waits up to 30 seconds for a USB terminal connections
Helmut64 0:3b6c2ce051a6 42 */
Helmut Tschemernjak 3:b5052f3fa638 43 InitSerial(30*1000, &statusLED);
Helmut Tschemernjak 37:77fa81e4ad79 44 RunStartup();
Helmut Tschemernjak 3:b5052f3fa638 45 dprintf("Welcome to RadioShuttle v%d.%d", RS_MAJOR, RS_MINOR);
Helmut Tschemernjak 37:77fa81e4ad79 46 timerUpdate(); // start timer for status blinked, can be disalbed to save energy
Helmut Tschemernjak 3:b5052f3fa638 47 #if defined (USER_BUTTON_RISE) // attach switchInput function to the rising or falling edge
Helmut Tschemernjak 3:b5052f3fa638 48 buttonIntr.rise(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 49 #else
Helmut Tschemernjak 3:b5052f3fa638 50 buttonIntr.fall(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 51 #endif
Helmut Tschemernjak 34:d3d60dbb84ea 52
Helmut Tschemernjak 37:77fa81e4ad79 53 RunCommands(10000); // check 10 secs for any commands
Helmut Tschemernjak 34:d3d60dbb84ea 54
Helmut Tschemernjak 34:d3d60dbb84ea 55 #ifdef FEATURE_LORA
Helmut Tschemernjak 34:d3d60dbb84ea 56 InitRadio();
Helmut Tschemernjak 34:d3d60dbb84ea 57 #endif
Helmut Tschemernjak 34:d3d60dbb84ea 58
Helmut Tschemernjak 3:b5052f3fa638 59 /*
Helmut Tschemernjak 3:b5052f3fa638 60 * Main event loop, process interrupts and go to sleep
Helmut Tschemernjak 3:b5052f3fa638 61 * the green statusLED indicates CPU activity
Helmut Tschemernjak 5:c6a960febe80 62 * the red redLED indicates that low power timeout function is running.
Helmut Tschemernjak 3:b5052f3fa638 63 */
Helmut Tschemernjak 3:b5052f3fa638 64 while(true) {
Helmut Tschemernjak 3:b5052f3fa638 65 while ((readPendingInterrupts() == 0)) {
Helmut Tschemernjak 3:b5052f3fa638 66 statusLED = 0;
Helmut Tschemernjak 34:d3d60dbb84ea 67 #ifdef FEATURE_USBSERIAL
Helmut Tschemernjak 3:b5052f3fa638 68 if (!(usb && usb->connected()))
Helmut Tschemernjak 34:d3d60dbb84ea 69 #endif
Helmut Tschemernjak 3:b5052f3fa638 70 sleep();
Helmut Tschemernjak 3:b5052f3fa638 71 statusLED = 1;
Helmut Tschemernjak 3:b5052f3fa638 72 }
Helmut Tschemernjak 3:b5052f3fa638 73
Helmut Tschemernjak 3:b5052f3fa638 74 uint32_t pendirqs = readclrPendingInterrupts();
Helmut Tschemernjak 3:b5052f3fa638 75 if (pendirqs & INT_BUTTON1) {
Helmut Tschemernjak 3:b5052f3fa638 76 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 77 statusLED = !statusLED;
Helmut Tschemernjak 3:b5052f3fa638 78 RadioUpdate(true); // pass the pressed user button to RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 79 #endif
Helmut Tschemernjak 3:b5052f3fa638 80 }
Helmut Tschemernjak 3:b5052f3fa638 81 if (pendirqs & INT_LORA) {
Helmut Tschemernjak 3:b5052f3fa638 82 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 83 RadioUpdate(false);
Helmut Tschemernjak 3:b5052f3fa638 84 #endif
Helmut Tschemernjak 3:b5052f3fa638 85 }
Helmut Tschemernjak 3:b5052f3fa638 86 if (pendirqs & INT_TIMEOUT) {
Helmut Tschemernjak 37:77fa81e4ad79 87 redLED = ! redLED;
Helmut Tschemernjak 3:b5052f3fa638 88 }
Helmut Tschemernjak 3:b5052f3fa638 89 }
Helmut64 0:3b6c2ce051a6 90 }