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:
Thu Jun 06 09:31:08 2019 +0200
Revision:
62:86aaaf9fa55d
Parent:
50:28166f6fdaa2
Updated OLED lib

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 45:22bb680cad5a 9 * Compiler Date/Time is not set correctly on startup using gcc
Helmut Tschemernjak 45:22bb680cad5a 10 * USB Serial block deepsleep
Helmut Tschemernjak 3:b5052f3fa638 11 */
Helmut Tschemernjak 3:b5052f3fa638 12 #include "main.h"
Helmut Tschemernjak 3:b5052f3fa638 13 #include "RadioTest.h"
Helmut64 0:3b6c2ce051a6 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 47:59a9923a9f77 21 InterruptMSG(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 47:59a9923a9f77 31 InterruptMSG(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 45:22bb680cad5a 43 InitSerial(30*1000, &statusLED, &buttonIntr);
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 45:22bb680cad5a 60 * Main event loop, process interrupts and goes to sleep when idle.
Helmut Tschemernjak 3:b5052f3fa638 61 * the green statusLED indicates CPU activity
Helmut Tschemernjak 45:22bb680cad5a 62 * the red redLED indicates that low power timerUpdate 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 45:22bb680cad5a 67 sleep();
Helmut Tschemernjak 3:b5052f3fa638 68 statusLED = 1;
Helmut Tschemernjak 3:b5052f3fa638 69 }
Helmut Tschemernjak 3:b5052f3fa638 70
Helmut Tschemernjak 3:b5052f3fa638 71 uint32_t pendirqs = readclrPendingInterrupts();
Helmut Tschemernjak 3:b5052f3fa638 72 if (pendirqs & INT_BUTTON1) {
Helmut Tschemernjak 3:b5052f3fa638 73 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 74 statusLED = !statusLED;
Helmut Tschemernjak 3:b5052f3fa638 75 RadioUpdate(true); // pass the pressed user button to RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 76 #endif
Helmut Tschemernjak 3:b5052f3fa638 77 }
Helmut Tschemernjak 3:b5052f3fa638 78 if (pendirqs & INT_LORA) {
Helmut Tschemernjak 3:b5052f3fa638 79 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 80 RadioUpdate(false);
Helmut Tschemernjak 3:b5052f3fa638 81 #endif
Helmut Tschemernjak 3:b5052f3fa638 82 }
Helmut Tschemernjak 3:b5052f3fa638 83 if (pendirqs & INT_TIMEOUT) {
Helmut Tschemernjak 37:77fa81e4ad79 84 redLED = ! redLED;
Helmut Tschemernjak 3:b5052f3fa638 85 }
Helmut Tschemernjak 3:b5052f3fa638 86 }
Helmut64 0:3b6c2ce051a6 87 }