MAX20361 Demo with LoRa Module on LP1 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of NonPingPong_PICO_LoRa_LP1 by Walter Luu

Committer:
walterluu
Date:
Fri Oct 16 23:26:04 2020 +0000
Revision:
8:5ff74d7381dc
Parent:
7:6264bc5b6421
LP1 code with PingPong removal and 10 second transmission

Who changed what in which revision?

UserRevisionLine numberNew contents of line
walterluu 3:85fc843a9d7d 1
walterluu 0:664d9df11a00 2 #include "mbed.h"
walterluu 3:85fc843a9d7d 3
walterluu 3:85fc843a9d7d 4 // Board pins related
walterluu 0:664d9df11a00 5 #include "PinMap.h"
walterluu 0:664d9df11a00 6
walterluu 3:85fc843a9d7d 7 // LORA related
walterluu 3:85fc843a9d7d 8 #include "global_buffers.h"
walterluu 3:85fc843a9d7d 9 #include "GenericPingPong2.h"
walterluu 3:85fc843a9d7d 10 #define FEATURE_LORA
walterluu 3:85fc843a9d7d 11 #include "sx1276-mbed-hal.h"
walterluu 3:85fc843a9d7d 12
walterluu 3:85fc843a9d7d 13 #include "main.h"
walterluu 0:664d9df11a00 14
walterluu 3:85fc843a9d7d 15 // OT07 related
walterluu 3:85fc843a9d7d 16 #include "OT07_lib.h"
walterluu 3:85fc843a9d7d 17 #define CONVERT_T_DELAY 30
walterluu 3:85fc843a9d7d 18
walterluu 3:85fc843a9d7d 19 // MAX44009 related
walterluu 3:85fc843a9d7d 20 #include "MAX44009_lib.h"
walterluu 3:85fc843a9d7d 21
walterluu 3:85fc843a9d7d 22 // AO32 related
walterluu 3:85fc843a9d7d 23 #include "AO32_lib.h"
walterluu 3:85fc843a9d7d 24
walterluu 6:51f492ca61a2 25 // AO19 related
walterluu 6:51f492ca61a2 26 #include "AO19_lib.h"
walterluu 6:51f492ca61a2 27
walterluu 7:6264bc5b6421 28 // Low Power Mode
walterluu 7:6264bc5b6421 29 #include "lp.h"
walterluu 7:6264bc5b6421 30 #include "mxc_config.h"
walterluu 7:6264bc5b6421 31 #include "lp.h"
walterluu 7:6264bc5b6421 32 #include "rtc.h"
walterluu 7:6264bc5b6421 33 //#include "board.h" // Cannot find source?
walterluu 8:5ff74d7381dc 34 #define LP1_WakeTime 10 //seconds
walterluu 0:664d9df11a00 35
walterluu 3:85fc843a9d7d 36 // Virtual COM related
walterluu 3:85fc843a9d7d 37 #include "USBSerial.h" // for virtual COM
walterluu 0:664d9df11a00 38 #define BS 8 // ASCII Back Space
walterluu 0:664d9df11a00 39 #define CR 13 // ASCII Carriage Return
walterluu 0:664d9df11a00 40
walterluu 0:664d9df11a00 41 // Virtual serial port over USB TODO NEW VID PID NEEDED!!
walterluu 0:664d9df11a00 42 USBSerial pc(0x0B6A, 0x0042, 0x0001, false);
walterluu 0:664d9df11a00 43
walterluu 3:85fc843a9d7d 44 /***************************************************************************
walterluu 3:85fc843a9d7d 45 * LEDs Instantiation
walterluu 3:85fc843a9d7d 46 **************************************************************************/
walterluu 0:664d9df11a00 47 DigitalOut myled(LED2); // LED = LED2 green
walterluu 0:664d9df11a00 48 DigitalOut rLED(LED1); // red LED
walterluu 0:664d9df11a00 49 DigitalOut bLED(LED3); // blue LED
walterluu 3:85fc843a9d7d 50 //DigitalOut *led3;
walterluu 0:664d9df11a00 51
walterluu 3:85fc843a9d7d 52 /***************************************************************************
walterluu 3:85fc843a9d7d 53 * I2C Bus Instantiation
walterluu 3:85fc843a9d7d 54 **************************************************************************/
walterluu 3:85fc843a9d7d 55 I2C i2cBus0(P1_6, P1_7); // I2C of MAX32625PICO
walterluu 0:664d9df11a00 56
walterluu 0:664d9df11a00 57
walterluu 6:51f492ca61a2 58 bool get_data_flag = false; // used for data tramission frequency on the SENSOR side
walterluu 6:51f492ca61a2 59 bool print_data_flag = false; // used for data display on the GATEWAY side
walterluu 0:664d9df11a00 60
walterluu 3:85fc843a9d7d 61 //Timer setup
walterluu 6:51f492ca61a2 62 Ticker timer_1; // timer for data tramission frequency on the SENSOR side
walterluu 6:51f492ca61a2 63 Ticker timer_M; // timer for data print out on the GATEWAY side
walterluu 0:664d9df11a00 64
walterluu 3:85fc843a9d7d 65 void onTimerInterrupt(){
walterluu 3:85fc843a9d7d 66 get_data_flag = true;
walterluu 3:85fc843a9d7d 67 }
walterluu 0:664d9df11a00 68
walterluu 6:51f492ca61a2 69 void onGatewayInterrupt(){
walterluu 6:51f492ca61a2 70 print_data_flag = true;
walterluu 6:51f492ca61a2 71 }
walterluu 6:51f492ca61a2 72
walterluu 7:6264bc5b6421 73 // *****************************************************************************
walterluu 7:6264bc5b6421 74 void RTC_Setup()
walterluu 7:6264bc5b6421 75 {
walterluu 7:6264bc5b6421 76 rtc_cfg_t RTCconfig;
walterluu 7:6264bc5b6421 77
walterluu 7:6264bc5b6421 78 // RTCconfig.compareCount[0] = 3;//3 second timer
walterluu 7:6264bc5b6421 79 RTCconfig.compareCount[1] = LP1_WakeTime; //3 second timer
walterluu 7:6264bc5b6421 80 RTCconfig.prescaler = RTC_PRESCALE_DIV_2_12; //1Hz clock
walterluu 7:6264bc5b6421 81 RTCconfig.prescalerMask = RTC_PRESCALE_DIV_2_12;//used for prescaler compare
walterluu 7:6264bc5b6421 82 RTCconfig.snoozeCount = 0;
walterluu 7:6264bc5b6421 83 RTCconfig.snoozeMode = RTC_SNOOZE_DISABLE;
walterluu 7:6264bc5b6421 84
walterluu 7:6264bc5b6421 85 RTC_Init(&RTCconfig);
walterluu 7:6264bc5b6421 86
walterluu 7:6264bc5b6421 87 RTC_Start();
walterluu 7:6264bc5b6421 88 }
walterluu 7:6264bc5b6421 89
walterluu 7:6264bc5b6421 90 //void Wakeup_LP1() {
walterluu 7:6264bc5b6421 91 //
walterluu 7:6264bc5b6421 92 // /***************************************************************************
walterluu 7:6264bc5b6421 93 // * Temperature Sensor Data Measurement
walterluu 7:6264bc5b6421 94 // **************************************************************************/
walterluu 7:6264bc5b6421 95 // // obtain register hex values
walterluu 7:6264bc5b6421 96 // convert_temperature(&i2cBus0, OT07_i2c_add); //send OW convert selected device
walterluu 7:6264bc5b6421 97 // wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete
walterluu 7:6264bc5b6421 98 // int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2);
walterluu 7:6264bc5b6421 99 // double tempFinal = calc_temperature(rawtempdata);
walterluu 7:6264bc5b6421 100 //
walterluu 7:6264bc5b6421 101 // //fill raw temp data into the array
walterluu 7:6264bc5b6421 102 // curr_raw_temp_to_master[0] = rawtempdata[0];
walterluu 7:6264bc5b6421 103 // curr_raw_temp_to_master[1] = rawtempdata[1];
walterluu 7:6264bc5b6421 104 //
walterluu 7:6264bc5b6421 105 // /***************************************************************************
walterluu 7:6264bc5b6421 106 // * Light Intensity Sensor Data Measurement
walterluu 7:6264bc5b6421 107 // **************************************************************************/
walterluu 7:6264bc5b6421 108 // // obtain register hex values
walterluu 7:6264bc5b6421 109 // int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata);
walterluu 7:6264bc5b6421 110 // int luxFinal = (int) (calc_lux(rawluxdata));
walterluu 7:6264bc5b6421 111 //
walterluu 7:6264bc5b6421 112 // //fill raw lux data into the array
walterluu 7:6264bc5b6421 113 // curr_raw_light_to_master[0] = rawluxdata[0];
walterluu 7:6264bc5b6421 114 // curr_raw_light_to_master[1] = rawluxdata[1];
walterluu 7:6264bc5b6421 115 //
walterluu 7:6264bc5b6421 116 // /***************************************************************************
walterluu 7:6264bc5b6421 117 // * Solar Harvester Data Measurement
walterluu 7:6264bc5b6421 118 // **************************************************************************/
walterluu 7:6264bc5b6421 119 //
walterluu 7:6264bc5b6421 120 // int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata);
walterluu 7:6264bc5b6421 121 // int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes
walterluu 7:6264bc5b6421 122 //
walterluu 7:6264bc5b6421 123 // //calculate open circuit voltage from data
walterluu 7:6264bc5b6421 124 // double OCVFinal = calc_OCV(rawOCVdata);
walterluu 7:6264bc5b6421 125 //
walterluu 7:6264bc5b6421 126 // //calculate harvesting counts from data
walterluu 7:6264bc5b6421 127 // int countFinal = calc_Harvest(rawCntdata);
walterluu 7:6264bc5b6421 128 //
walterluu 7:6264bc5b6421 129 // //fill raw AO32 data into the array
walterluu 7:6264bc5b6421 130 // curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first
walterluu 7:6264bc5b6421 131 // curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte
walterluu 7:6264bc5b6421 132 // curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte
walterluu 7:6264bc5b6421 133 //
walterluu 7:6264bc5b6421 134 // // print out sensor data
walterluu 7:6264bc5b6421 135 // pc.printf("SENSOR: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempFinal, luxFinal, OCVFinal, countFinal);
walterluu 7:6264bc5b6421 136 //
walterluu 7:6264bc5b6421 137 // /***************************************************************************
walterluu 7:6264bc5b6421 138 // * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
walterluu 7:6264bc5b6421 139 // **************************************************************************/
walterluu 7:6264bc5b6421 140 // memcpy(&BufferTx[tx_idx_signature], PongMsg, size_signature);
walterluu 7:6264bc5b6421 141 // memcpy(&BufferTx[tx_idx_MAX30208], curr_raw_temp_to_master, size_of_MAX30208);
walterluu 7:6264bc5b6421 142 // memcpy(&BufferTx[tx_idx_MAX44009], curr_raw_light_to_master, size_of_MAX44009);
walterluu 7:6264bc5b6421 143 // memcpy(&BufferTx[tx_idx_MAX20361], curr_raw_AO32_to_master, size_of_MAX20361);
walterluu 7:6264bc5b6421 144 //
walterluu 7:6264bc5b6421 145 // /***************************************************************************
walterluu 7:6264bc5b6421 146 // * LoRa Communication: Send Sensor Data
walterluu 7:6264bc5b6421 147 // **************************************************************************/
walterluu 7:6264bc5b6421 148 // SX1276SlaveSendData();
walterluu 7:6264bc5b6421 149 //}
walterluu 7:6264bc5b6421 150
walterluu 0:664d9df11a00 151 int main() {
walterluu 0:664d9df11a00 152
walterluu 3:85fc843a9d7d 153 /***************************************************************************
walterluu 3:85fc843a9d7d 154
walterluu 3:85fc843a9d7d 155 /* Setup begins here: */
walterluu 3:85fc843a9d7d 156 #if MASTER == 1 // Master Device
walterluu 7:6264bc5b6421 157 rLED = LED_ON; // red LED on
walterluu 7:6264bc5b6421 158 myled = LED_OFF;
walterluu 7:6264bc5b6421 159 bLED = LED_OFF;
walterluu 3:85fc843a9d7d 160 #elif SLAVE == 1 // Slave Device
walterluu 7:6264bc5b6421 161 rLED = LED_OFF;
walterluu 7:6264bc5b6421 162 myled = LED_OFF;
walterluu 7:6264bc5b6421 163 bLED = LED_ON; // blue LED on
walterluu 7:6264bc5b6421 164
walterluu 7:6264bc5b6421 165 //configure RTC and start for slave
walterluu 7:6264bc5b6421 166 RTC_Setup();
walterluu 7:6264bc5b6421 167
walterluu 3:85fc843a9d7d 168 #endif
walterluu 3:85fc843a9d7d 169
walterluu 3:85fc843a9d7d 170 /***************************************************************************
walterluu 3:85fc843a9d7d 171 * Combined Payload Buffers for LoRa Communications
walterluu 3:85fc843a9d7d 172 **************************************************************************/
walterluu 3:85fc843a9d7d 173 uint8_t BufferTx[BufferSizeTx]; // more info in global_buffers.h
walterluu 3:85fc843a9d7d 174 uint8_t BufferRx[BufferSizeRx]; // more info in global_buffers.h
walterluu 3:85fc843a9d7d 175
walterluu 3:85fc843a9d7d 176 /***************************************************************************
walterluu 3:85fc843a9d7d 177 * Identification Buffers
walterluu 3:85fc843a9d7d 178 **************************************************************************/
walterluu 3:85fc843a9d7d 179 #if MASTER == 1 // Master Device
walterluu 3:85fc843a9d7d 180 uint8_t ID_of_slave[size_signature];
walterluu 3:85fc843a9d7d 181 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 182 uint8_t ID_of_master[size_signature];
walterluu 3:85fc843a9d7d 183 #endif
walterluu 3:85fc843a9d7d 184
walterluu 3:85fc843a9d7d 185 /***************************************************************************
walterluu 3:85fc843a9d7d 186 * MAX30208 Data Buffers
walterluu 3:85fc843a9d7d 187 **************************************************************************/
walterluu 3:85fc843a9d7d 188 #if MASTER == 1 // Master Device
walterluu 5:9e751733a6f3 189 char curr_raw_temp_from_slave[size_of_MAX30208]; // to match data type
walterluu 6:51f492ca61a2 190 char prev_raw_temp_from_slave[size_of_MAX30208];
walterluu 3:85fc843a9d7d 191 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 192 uint8_t curr_raw_temp_to_master[size_of_MAX30208];
walterluu 3:85fc843a9d7d 193 #endif
walterluu 3:85fc843a9d7d 194
walterluu 0:664d9df11a00 195
walterluu 3:85fc843a9d7d 196 /***************************************************************************
walterluu 3:85fc843a9d7d 197 * MAX44009 Data Buffers
walterluu 3:85fc843a9d7d 198 **************************************************************************/
walterluu 3:85fc843a9d7d 199 #if MASTER == 1 // Master Device
walterluu 5:9e751733a6f3 200 char curr_raw_light_from_slave[size_of_MAX44009]; // to match data type
walterluu 6:51f492ca61a2 201 char prev_raw_light_from_slave[size_of_MAX44009];
walterluu 3:85fc843a9d7d 202 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 203 uint8_t curr_raw_light_to_master[size_of_MAX44009];
walterluu 3:85fc843a9d7d 204 #endif
walterluu 3:85fc843a9d7d 205
walterluu 3:85fc843a9d7d 206 /***************************************************************************
walterluu 3:85fc843a9d7d 207 * MAX20361 Data Buffers
walterluu 3:85fc843a9d7d 208 **************************************************************************/
walterluu 3:85fc843a9d7d 209 #if MASTER == 1 // Master Device
walterluu 5:9e751733a6f3 210 char curr_raw_AO32_from_slave[size_of_MAX20361]; // to match data type
walterluu 6:51f492ca61a2 211 char prev_raw_AO32_from_slave[size_of_MAX20361];
walterluu 3:85fc843a9d7d 212 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 213 uint8_t curr_raw_AO32_to_master[size_of_MAX20361];
walterluu 3:85fc843a9d7d 214 #endif
walterluu 3:85fc843a9d7d 215
walterluu 3:85fc843a9d7d 216 /***************************************************************************
walterluu 3:85fc843a9d7d 217 * Finish Setting up LoRa Radios: This passes in pointers to Buffers to send
walterluu 3:85fc843a9d7d 218 **************************************************************************/
walterluu 3:85fc843a9d7d 219 SX1276PingPongSetup(BufferTx, BufferRx, &pc);
walterluu 3:85fc843a9d7d 220
walterluu 7:6264bc5b6421 221 // Pointer Tutorial
walterluu 3:85fc843a9d7d 222 // https://www.tutorialspoint.com/cprogramming/c_pointers.htm
walterluu 3:85fc843a9d7d 223
walterluu 3:85fc843a9d7d 224 /***************************************************************************
walterluu 3:85fc843a9d7d 225 * Loop Counter
walterluu 3:85fc843a9d7d 226 **************************************************************************/
walterluu 3:85fc843a9d7d 227 int loopCnt = 0;
walterluu 3:85fc843a9d7d 228
walterluu 6:51f492ca61a2 229 #if MASTER == 1
walterluu 6:51f492ca61a2 230 //************* init ticker timer callbacks ****************
walterluu 6:51f492ca61a2 231 timer_M.attach(&onGatewayInterrupt, 3); //Gateway data print out frequency
walterluu 6:51f492ca61a2 232 #endif
walterluu 6:51f492ca61a2 233
walterluu 3:85fc843a9d7d 234 #if SLAVE == 1
walterluu 3:85fc843a9d7d 235 //************* init ticker timer callbacks ****************
walterluu 7:6264bc5b6421 236 timer_1.attach(&onTimerInterrupt, 10); //Sensor data transmission frequency
walterluu 3:85fc843a9d7d 237
walterluu 6:51f492ca61a2 238 //************* OT07 Variables ****************
walterluu 3:85fc843a9d7d 239 char rawtempdata[2];
walterluu 3:85fc843a9d7d 240 char OT07_i2c_add = 0xA0;
walterluu 3:85fc843a9d7d 241
walterluu 3:85fc843a9d7d 242 //************* MAX44009 Variables ****************
walterluu 3:85fc843a9d7d 243 char rawluxdata[2];
walterluu 5:9e751733a6f3 244 char MAX44009_i2c_add = 0x94; // 0b1001 010x
walterluu 3:85fc843a9d7d 245
walterluu 3:85fc843a9d7d 246 //************* AO32 Variables ****************
walterluu 3:85fc843a9d7d 247 char rawOCVdata[2]; // only needs 1
walterluu 3:85fc843a9d7d 248 char rawCntdata[2];
walterluu 3:85fc843a9d7d 249 char AO32_i2c_add = 0x2A; // 0b0010 101x
walterluu 3:85fc843a9d7d 250
walterluu 6:51f492ca61a2 251 //************* AO19 Settings ****************
walterluu 6:51f492ca61a2 252 // Enable AO19
walterluu 6:51f492ca61a2 253 char AO19_i2c_add = 0xD0; //
walterluu 6:51f492ca61a2 254 char AO19_BB_CFG[2]; // store result of AO19's register 0x01 BBstCfg0
walterluu 6:51f492ca61a2 255 int AO19_read = AO19_read_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG);
walterluu 6:51f492ca61a2 256
walterluu 6:51f492ca61a2 257 int AO19_en = AO19_write_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG[0]|0x80);
walterluu 6:51f492ca61a2 258
walterluu 6:51f492ca61a2 259 // if (AO19_en) {
walterluu 6:51f492ca61a2 260 // pc.printf("AO19 Enabled fail!\r\n");
walterluu 6:51f492ca61a2 261 // }
walterluu 6:51f492ca61a2 262 // else {
walterluu 6:51f492ca61a2 263 // pc.printf("AO19 Enabledsuccess!\r\n");
walterluu 6:51f492ca61a2 264 // }
walterluu 6:51f492ca61a2 265
walterluu 3:85fc843a9d7d 266 #endif
walterluu 0:664d9df11a00 267
walterluu 3:85fc843a9d7d 268 while (1) {
walterluu 6:51f492ca61a2 269
walterluu 3:85fc843a9d7d 270 #if SLAVE == 1
walterluu 7:6264bc5b6421 271
walterluu 7:6264bc5b6421 272 /***************************************************************************
walterluu 7:6264bc5b6421 273 * LP1 Experiment
walterluu 7:6264bc5b6421 274 **************************************************************************/
walterluu 7:6264bc5b6421 275 //Clear existing wake-up config
walterluu 7:6264bc5b6421 276 LP_ClearWakeUpConfig();
walterluu 7:6264bc5b6421 277
walterluu 7:6264bc5b6421 278 //Clear any event flags
walterluu 7:6264bc5b6421 279 LP_ClearWakeUpFlags();
walterluu 7:6264bc5b6421 280
walterluu 7:6264bc5b6421 281 //configure wake-up on RTC compare 1
walterluu 7:6264bc5b6421 282 LP_ConfigRTCWakeUp(0, 1, 0, 0);
walterluu 7:6264bc5b6421 283
walterluu 7:6264bc5b6421 284
walterluu 7:6264bc5b6421 285 //set RTC compare 1 value
walterluu 7:6264bc5b6421 286 uint32_t cmp = RTC_GetCount() + LP1_WakeTime;
walterluu 7:6264bc5b6421 287 RTC_SetCompare(1,cmp);
walterluu 7:6264bc5b6421 288 RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP1);
walterluu 7:6264bc5b6421 289
walterluu 7:6264bc5b6421 290 //global disable interrupt
walterluu 7:6264bc5b6421 291 __disable_irq();
walterluu 7:6264bc5b6421 292
walterluu 7:6264bc5b6421 293 LP_EnterLP1();
walterluu 7:6264bc5b6421 294
walterluu 7:6264bc5b6421 295 //global enable interrupt
walterluu 7:6264bc5b6421 296 __enable_irq();
walterluu 7:6264bc5b6421 297
walterluu 7:6264bc5b6421 298 // Wakeup_LP1();
walterluu 7:6264bc5b6421 299 // Wake up from LP1, collect data and send
walterluu 3:85fc843a9d7d 300
walterluu 3:85fc843a9d7d 301 /***************************************************************************
walterluu 3:85fc843a9d7d 302 * Temperature Sensor Data Measurement
walterluu 3:85fc843a9d7d 303 **************************************************************************/
walterluu 3:85fc843a9d7d 304 // obtain register hex values
walterluu 3:85fc843a9d7d 305 convert_temperature(&i2cBus0, OT07_i2c_add); //send OW convert selected device
walterluu 3:85fc843a9d7d 306 wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete
walterluu 3:85fc843a9d7d 307 int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2);
walterluu 5:9e751733a6f3 308 double tempFinal = calc_temperature(rawtempdata);
walterluu 3:85fc843a9d7d 309
walterluu 3:85fc843a9d7d 310 //fill raw temp data into the array
walterluu 3:85fc843a9d7d 311 curr_raw_temp_to_master[0] = rawtempdata[0];
walterluu 3:85fc843a9d7d 312 curr_raw_temp_to_master[1] = rawtempdata[1];
walterluu 0:664d9df11a00 313
walterluu 3:85fc843a9d7d 314 /***************************************************************************
walterluu 3:85fc843a9d7d 315 * Light Intensity Sensor Data Measurement
walterluu 3:85fc843a9d7d 316 **************************************************************************/
walterluu 3:85fc843a9d7d 317 // obtain register hex values
walterluu 5:9e751733a6f3 318 int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata);
walterluu 6:51f492ca61a2 319 int luxFinal = (int) (calc_lux(rawluxdata));
walterluu 3:85fc843a9d7d 320
walterluu 3:85fc843a9d7d 321 //fill raw lux data into the array
walterluu 5:9e751733a6f3 322 curr_raw_light_to_master[0] = rawluxdata[0];
walterluu 5:9e751733a6f3 323 curr_raw_light_to_master[1] = rawluxdata[1];
walterluu 3:85fc843a9d7d 324
walterluu 3:85fc843a9d7d 325 /***************************************************************************
walterluu 3:85fc843a9d7d 326 * Solar Harvester Data Measurement
walterluu 3:85fc843a9d7d 327 **************************************************************************/
walterluu 3:85fc843a9d7d 328
walterluu 3:85fc843a9d7d 329 int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata);
walterluu 3:85fc843a9d7d 330 int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes
walterluu 3:85fc843a9d7d 331
walterluu 3:85fc843a9d7d 332 //calculate open circuit voltage from data
walterluu 7:6264bc5b6421 333 // double voltage = (double)(rawOCVdata[0]) / 100;
walterluu 5:9e751733a6f3 334 double OCVFinal = calc_OCV(rawOCVdata);
walterluu 3:85fc843a9d7d 335
walterluu 3:85fc843a9d7d 336 //calculate harvesting counts from data
walterluu 5:9e751733a6f3 337 int countFinal = calc_Harvest(rawCntdata);
walterluu 3:85fc843a9d7d 338
walterluu 3:85fc843a9d7d 339 //fill raw AO32 data into the array
walterluu 5:9e751733a6f3 340 curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first
walterluu 5:9e751733a6f3 341 curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte
walterluu 5:9e751733a6f3 342 curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte
walterluu 0:664d9df11a00 343
walterluu 6:51f492ca61a2 344 // print out sensor data
walterluu 6:51f492ca61a2 345 pc.printf("SENSOR: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempFinal, luxFinal, OCVFinal, countFinal);
walterluu 6:51f492ca61a2 346
walterluu 3:85fc843a9d7d 347 /***************************************************************************
walterluu 3:85fc843a9d7d 348 * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
walterluu 3:85fc843a9d7d 349 **************************************************************************/
walterluu 8:5ff74d7381dc 350 // memcpy(&BufferTx[tx_idx_signature], PongMsg, size_signature);
walterluu 3:85fc843a9d7d 351 memcpy(&BufferTx[tx_idx_MAX30208], curr_raw_temp_to_master, size_of_MAX30208);
walterluu 3:85fc843a9d7d 352 memcpy(&BufferTx[tx_idx_MAX44009], curr_raw_light_to_master, size_of_MAX44009);
walterluu 3:85fc843a9d7d 353 memcpy(&BufferTx[tx_idx_MAX20361], curr_raw_AO32_to_master, size_of_MAX20361);
walterluu 7:6264bc5b6421 354
walterluu 3:85fc843a9d7d 355 /***************************************************************************
walterluu 3:85fc843a9d7d 356 * LoRa Communication: Send Sensor Data
walterluu 3:85fc843a9d7d 357 **************************************************************************/
walterluu 7:6264bc5b6421 358 SX1276SlaveSendData();
walterluu 7:6264bc5b6421 359
walterluu 7:6264bc5b6421 360 #endif // end define for Slave
walterluu 3:85fc843a9d7d 361
walterluu 3:85fc843a9d7d 362
walterluu 7:6264bc5b6421 363 #if MASTER == 1 // only Receive Sensor Data
walterluu 3:85fc843a9d7d 364 /***************************************************************************
walterluu 3:85fc843a9d7d 365 * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
walterluu 3:85fc843a9d7d 366 **************************************************************************/
walterluu 8:5ff74d7381dc 367 // memcpy(&BufferTx[tx_idx_signature], PingMsg, size_signature); // no need
walterluu 3:85fc843a9d7d 368
walterluu 3:85fc843a9d7d 369 /***************************************************************************
walterluu 3:85fc843a9d7d 370 * LoRa Communication: Gateway Receive Sensor Data
walterluu 3:85fc843a9d7d 371 **************************************************************************/
walterluu 7:6264bc5b6421 372 // SX1276PingPong();
walterluu 7:6264bc5b6421 373 if(SX1276MasterCheckForNewData())
walterluu 7:6264bc5b6421 374 {
walterluu 3:85fc843a9d7d 375
walterluu 3:85fc843a9d7d 376 /***************************************************************************
walterluu 3:85fc843a9d7d 377 * Fill Main Program Buffers With Data From Received Payload Buffer
walterluu 3:85fc843a9d7d 378 **************************************************************************/
walterluu 8:5ff74d7381dc 379 // memcpy(ID_of_slave, &BufferRx[rx_idx_signature], size_signature);
walterluu 8:5ff74d7381dc 380 memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208);
walterluu 3:85fc843a9d7d 381 memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
walterluu 3:85fc843a9d7d 382 memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361);
walterluu 3:85fc843a9d7d 383
walterluu 3:85fc843a9d7d 384 /***************************************************************************
walterluu 3:85fc843a9d7d 385 * Master Device: Print out Slave Data
walterluu 3:85fc843a9d7d 386 **************************************************************************/
walterluu 3:85fc843a9d7d 387
walterluu 5:9e751733a6f3 388 double tempResult = calc_temperature(curr_raw_temp_from_slave);
walterluu 6:51f492ca61a2 389 int luxResult = (int) calc_lux(curr_raw_light_from_slave);
walterluu 5:9e751733a6f3 390
walterluu 8:5ff74d7381dc 391 char OCVrawHex[1];
walterluu 5:9e751733a6f3 392 OCVrawHex[0] = curr_raw_AO32_from_slave[0];
walterluu 8:5ff74d7381dc 393 // OCVrawHex[1] = curr_raw_AO32_from_slave[1];
walterluu 5:9e751733a6f3 394 char CntrawHex[2];
walterluu 8:5ff74d7381dc 395 CntrawHex[0] = curr_raw_AO32_from_slave[1];
walterluu 8:5ff74d7381dc 396 CntrawHex[1] = curr_raw_AO32_from_slave[2];
walterluu 5:9e751733a6f3 397
walterluu 5:9e751733a6f3 398 double OCVResult = calc_OCV(OCVrawHex);
walterluu 5:9e751733a6f3 399 int CntResult = calc_Harvest(CntrawHex);
walterluu 7:6264bc5b6421 400
walterluu 7:6264bc5b6421 401 //reset the flag
walterluu 7:6264bc5b6421 402 pc.printf("MSG: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempResult, luxResult, OCVResult, CntResult);
walterluu 3:85fc843a9d7d 403
walterluu 7:6264bc5b6421 404 } // end of SX1276MasterCheckForNewData
walterluu 7:6264bc5b6421 405
walterluu 3:85fc843a9d7d 406 loopCnt = loopCnt + 1;
walterluu 3:85fc843a9d7d 407
walterluu 7:6264bc5b6421 408 #endif // end define for Master
walterluu 7:6264bc5b6421 409
walterluu 3:85fc843a9d7d 410 } // end of while(1) loop
walterluu 3:85fc843a9d7d 411
walterluu 6:51f492ca61a2 412 } // end of main()