![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This is an example application based on Mbed-OS LoRaWAN protocol APIs. The Mbed-OS LoRaWAN stack implementation is compliant with LoRaWAN v1.0.2 specification.
Dependencies: Lorawan_Version_0_1
Dependents: Lorawan_Version_0_1
main.cpp
- Committer:
- jacktractive
- Date:
- 2020-01-24
- Revision:
- 71:ca2425c0a864
- Parent:
- 70:65b2f1cc2859
- Child:
- 72:67c5bce77999
File content as of revision 71:ca2425c0a864:
#include <stdio.h> #include "Watchdog.h" #include "events/EventQueue.h" #include "trace_helper.h" #include <mbed.h> #include "mbed_stats.h" #include "Light.h" #include "GPS.h" #include "Lora.h" #define MAX_NUMBER_OF_EVENTS 20 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE); uint32_t TickCounter; uint32_t TickTime=3000; uint32_t LoraTickCounter; uint32_t LoraTickTime=15000; //15000 bool IsLoading; AnalogIn LadeSpannung(PB_0); // 1/11 der gleichgerichteten Spannung am Dynamo //Light DigitalOut LichtAus(PC_12); DigitalOut LichtHell(PC_9); Light light(&ev_queue,&LichtAus,&LichtHell); //Userbutton DigitalIn USERButton(PB_15); //GPS DigitalOut GPSdisable(PC_6); GPS GPS_modul(PC_4, PC_5, 9600,&GPSdisable); uint32_t TimeWithoutMoving; //Lora Lora lora(&ev_queue, &light, &GPS_modul); //Im LifeTicker wird geprüft ob das Fahrrad in Bewegung ist static void LifeTicker() { //Lifetick TickCounter=TickCounter+1; printf("\n[LiveTick] --- [%i] ", TickCounter); //Dynamo - Fahrrad in Bewegung - Licht einschalten if(LadeSpannung.read()*3.3f*11 > 5) { IsLoading = 1; TimeWithoutMoving =0 ; printf("[SYSTEM] Akku laden mit: %fV", LadeSpannung.read()*3.3f*11); }else { IsLoading = 0; TimeWithoutMoving=TimeWithoutMoving+TickTime; printf("[SYSTEM] Fahrrad steht seit: %is", TimeWithoutMoving/1000); } light.adjust(IsLoading,TimeWithoutMoving); // User Button - Manuelles Tracking if (!USERButton){ if (GPS_modul.manual_tracking){ GPS_modul.set_manual_tracking(false); light.Blinken_ein(1000); } else { GPS_modul.set_manual_tracking(true); light.Blinken_ein(400); } } } // Im LoraTicker wird Lora und GPS Zyklen verwaltet static void LoraTicker() { //Watchdog Watchdog &watchdog = Watchdog::get_instance(); Watchdog::get_instance().kick(); // kick the Watchdog before the timeout //Lora Lifetick LoraTickCounter=LoraTickCounter+1; printf("\n\n[LoraTick] --- [%i]", LoraTickCounter); //Sleep Statistik mbed_stats_cpu_t stats; mbed_stats_cpu_get(&stats); printf("\n[SYSTEM] Uptime: %llu Idle: %llu Sleep: %llu Deep: %llu", stats.uptime / 1000 , stats.idle_time / 1000, stats.sleep_time / 1000,stats.deep_sleep_time / 1000); //GPS wird ausgemacht wenn das Fahrrad lange steht GPS_modul.idle(TimeWithoutMoving>=300000); GPS_modul.GPS_aktiv(); //LORA lora.send_Position_to_Lora(0x01, GPS_modul.time,GPS_modul.longitude,GPS_modul.latitude); } /** * Entry point for application */ int main(void) { Watchdog &watchdog = Watchdog::get_instance(); watchdog.start(30000); //30s ohne kick im Ticker wird die CPU neu gestartet uint32_t watchdog_timeout = watchdog.get_timeout(); printf("Watchdog initialized to %iu ms.\r\n", watchdog_timeout); ev_queue.call_every(TickTime,LifeTicker); //Zyklus um Dynamoaktivitäten zu prüfen ev_queue.call_every(LoraTickTime,LoraTicker); //Zyklus zum senden über Lora setup_trace(); // setup tracing für mehr Infos im log über lora lora.Lora_init(); // Lora initialisieren ev_queue.dispatch_forever();// make your event queue dispatching events forever return 0; } // EOF