-
Notifications
You must be signed in to change notification settings - Fork 0
/
SoRTeSProject.ino
127 lines (100 loc) · 3.32 KB
/
SoRTeSProject.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <SPI.h>
#include <LoRa.h>
#include <Arduino_FreeRTOS.h>
#include <EEPROM.h>
#include <semphr.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
/* * * * * * * * * * * * * * * * * *
* CONFIGURATION SETTINGS
* * * * * * * * * * * * * * * * * */
// LoR32u4II 868MHz or 915MHz Settings
#define SCK 15
#define MISO 14
#define MOSI 16
#define SS 8
#define RST 4
#define DI0 7
#define BAND 869300000 // 915E6
#define PABOOST true
// Database settings
#define TABLE_SIZE 512 // Arduino 168 or greater
/* * * * * * * * * * * * * * * * * *
* DATA STRUCTS & VARS
* * * * * * * * * * * * * * * * * */
typedef struct {
//int beaconId;
int sleepTime;
uint16_t temperature;
} TempEvent;
int beaconCount = 0; // Keep track of received number of beacons
int numberOfBeacons = 20;
byte adcsra_buf = ADCSRA;
bool listenSerialActive = true;
/* * * * * * * * * * * * * * * * * *
* FREE RTOS DEFINITIONS
* * * * * * * * * * * * * * * * * */
// Idle Application Hook
void vApplicationIdleHook( void );
// Semaphore handles
SemaphoreHandle_t sleepSemaphore;
SemaphoreHandle_t dbSemaphore;
// Queues
QueueHandle_t receiveQueue;
QueueHandle_t readTempQueue;
QueueHandle_t writeTempQueue;
// Task handles
TaskHandle_t readSerialHandle = NULL;
/* * * * * * * * * * * * * * * * * *
* INITIAL SETUP
* * * * * * * * * * * * * * * * * */
void setup() {
// Start serial
Serial.begin(9600);
/* FREERTOS Init
*
* Tasks
* -------------------------------------------------------------------------------------
* Task Human readable name Stack Parameters Priority Handle */
xTaskCreate(ReadSerialCommand, "LoRa Receive", 128, NULL, 2, &readSerialHandle);
xTaskCreate(logTemp, "Write temp to db", 128, NULL, 1, NULL);
xTaskCreate(LoRaWaitForNext, "Wait for next LoRa signal", 128, NULL, 3, NULL);
xTaskCreate(sendTemp, "Send temperature to GW", 128, NULL, 1, NULL);
xTaskCreate(enableDeepSleep, "Turn on deep sleep", 128, NULL, 0, NULL);
//vTaskStartScheduler();
/*
* Semaphore creation + Queue creation
* ------------------------------------------------------------------------------------- */
vSemaphoreCreateBinary(sleepSemaphore);
vSemaphoreCreateBinary(dbSemaphore);
writeTempQueue = xQueueCreate(2, sizeof(TempEvent));
readTempQueue = xQueueCreate(2, sizeof(int));
receiveQueue = xQueueCreate(2, sizeof(int));
// Power mgmt setup
//pinMode(interruptPin, INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(interruptPin), wakeUpFromDeepSleep, CHANGE);
enableLowPower();
delay(2000);
// Create database
xSemaphoreGive(dbSemaphore);
initDb();
Serial.println("Starting..");
// Discard first temperature read
adcReadTemp();
delay(2000);
// Setup LoRa
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(BAND,PABOOST )) {
Serial.println("Starting LoRa failed!");
}
Serial.println("Started LoRa");
LoRa.onReceive(LoRaReceive);
LoRa.receive();
Serial.println("Setup finished succesfully!");
}
/* * * * * * * * * * * * * * * * * *
* LOOP
* * * * * * * * * * * * * * * * * */
void loop() {
}