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 Jan 20 16:12:01 2019 +0100
Revision:
3:b5052f3fa638
Parent:
0:3b6c2ce051a6
Child:
5:c6a960febe80
First turtle board RadioShuttle support

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"
Helmut64 0:3b6c2ce051a6 15
Helmut Tschemernjak 3:b5052f3fa638 16 volatile uint32_t PendingInterrupts; // global interrupt mask of received interrupts
Helmut Tschemernjak 3:b5052f3fa638 17 DigitalOut statusLED(LED);
Helmut Tschemernjak 3:b5052f3fa638 18 DigitalOut redLED(LED2);
Helmut Tschemernjak 3:b5052f3fa638 19 InterruptIn buttonIntr(USER_BUTTON);
Helmut Tschemernjak 3:b5052f3fa638 20 LowPowerTimeout timeout;
Helmut64 0:3b6c2ce051a6 21
Helmut Tschemernjak 3:b5052f3fa638 22 void switchInput(void) {
Helmut Tschemernjak 3:b5052f3fa638 23 InterrruptMSG(INT_BUTTON1);
Helmut Tschemernjak 3:b5052f3fa638 24 }
Helmut64 0:3b6c2ce051a6 25
Helmut64 0:3b6c2ce051a6 26
Helmut Tschemernjak 3:b5052f3fa638 27 void timerUpdate(void) {
Helmut Tschemernjak 3:b5052f3fa638 28 if (redLED == 0)
Helmut Tschemernjak 3:b5052f3fa638 29 timeout.attach_us(&timerUpdate, 20000); // setup to call timerUpdate after 20 millis
Helmut Tschemernjak 3:b5052f3fa638 30 else
Helmut Tschemernjak 3:b5052f3fa638 31 timeout.attach_us(&timerUpdate, 2000000); // setup to call timerUpdate after 2 seconds
Helmut Tschemernjak 3:b5052f3fa638 32
Helmut Tschemernjak 3:b5052f3fa638 33 InterrruptMSG(INT_TIMEOUT);
Helmut Tschemernjak 3:b5052f3fa638 34 }
Helmut Tschemernjak 3:b5052f3fa638 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 3:b5052f3fa638 44 dprintf("Welcome to RadioShuttle v%d.%d", RS_MAJOR, RS_MINOR);
Helmut Tschemernjak 3:b5052f3fa638 45 dprintf("Voltage: %.2f (%s powered)", BatteryVoltage(), BatterySource());
Helmut Tschemernjak 3:b5052f3fa638 46
Helmut Tschemernjak 3:b5052f3fa638 47
Helmut Tschemernjak 3:b5052f3fa638 48 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 49 InitRadio();
Helmut Tschemernjak 3:b5052f3fa638 50 #endif
Helmut Tschemernjak 3:b5052f3fa638 51 #ifdef FEATURE_LORA_PING_PONG
Helmut Tschemernjak 3:b5052f3fa638 52 DeInitRadio();
Helmut Tschemernjak 3:b5052f3fa638 53 SX1276PingPong(); // basic LoRa raw ping/pong without RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 54 #endif
Helmut Tschemernjak 3:b5052f3fa638 55 dprintf("InitDefaults Done");
Helmut Tschemernjak 3:b5052f3fa638 56 timerUpdate(); // start timer
Helmut Tschemernjak 3:b5052f3fa638 57 #if defined (USER_BUTTON_RISE) // attach switchInput function to the rising or falling edge
Helmut Tschemernjak 3:b5052f3fa638 58 buttonIntr.rise(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 59 #else
Helmut Tschemernjak 3:b5052f3fa638 60 buttonIntr.fall(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 61 #endif
Helmut Tschemernjak 3:b5052f3fa638 62
Helmut Tschemernjak 3:b5052f3fa638 63 /*
Helmut Tschemernjak 3:b5052f3fa638 64 * Main event loop, process interrupts and go to sleep
Helmut Tschemernjak 3:b5052f3fa638 65 * the green statusLED indicates CPU activity
Helmut Tschemernjak 3:b5052f3fa638 66 */
Helmut Tschemernjak 3:b5052f3fa638 67 while(true) {
Helmut Tschemernjak 3:b5052f3fa638 68 while ((readPendingInterrupts() == 0)) {
Helmut Tschemernjak 3:b5052f3fa638 69 statusLED = 0;
Helmut Tschemernjak 3:b5052f3fa638 70 if (!(usb && usb->connected()))
Helmut Tschemernjak 3:b5052f3fa638 71 sleep();
Helmut Tschemernjak 3:b5052f3fa638 72 statusLED = 1;
Helmut Tschemernjak 3:b5052f3fa638 73 }
Helmut Tschemernjak 3:b5052f3fa638 74
Helmut Tschemernjak 3:b5052f3fa638 75 uint32_t pendirqs = readclrPendingInterrupts();
Helmut Tschemernjak 3:b5052f3fa638 76 if (pendirqs & INT_BUTTON1) {
Helmut Tschemernjak 3:b5052f3fa638 77 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 78 statusLED = !statusLED;
Helmut Tschemernjak 3:b5052f3fa638 79 RadioUpdate(true); // pass the pressed user button to RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 80 #endif
Helmut Tschemernjak 3:b5052f3fa638 81 }
Helmut Tschemernjak 3:b5052f3fa638 82 if (pendirqs & INT_LORA) {
Helmut Tschemernjak 3:b5052f3fa638 83 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 84 RadioUpdate(false);
Helmut Tschemernjak 3:b5052f3fa638 85 #endif
Helmut Tschemernjak 3:b5052f3fa638 86 }
Helmut Tschemernjak 3:b5052f3fa638 87 if (pendirqs & INT_TIMEOUT) {
Helmut Tschemernjak 3:b5052f3fa638 88 redLED = ! redLED;
Helmut Tschemernjak 3:b5052f3fa638 89 }
Helmut Tschemernjak 3:b5052f3fa638 90 }
Helmut64 0:3b6c2ce051a6 91 }