MAX32625PICO LP1 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of PICO_LP1 by Walter Luu

Committer:
walterluu
Date:
Wed Oct 14 00:19:02 2020 +0000
Revision:
6:51f492ca61a2
Parent:
5:9e751733a6f3
Child:
7:8875c4d513bb
Firmware Oct13

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 3:85fc843a9d7d 28 //#if defined(TARGET_MAX32630FTHR) // using the RFM95 board
walterluu 3:85fc843a9d7d 29 // #include "max32630fthr.h"
walterluu 3:85fc843a9d7d 30 // MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
walterluu 0:664d9df11a00 31 //#endif
walterluu 0:664d9df11a00 32
walterluu 3:85fc843a9d7d 33 // Virtual COM related
walterluu 3:85fc843a9d7d 34 #include "USBSerial.h" // for virtual COM
walterluu 0:664d9df11a00 35 #define BS 8 // ASCII Back Space
walterluu 0:664d9df11a00 36 #define CR 13 // ASCII Carriage Return
walterluu 0:664d9df11a00 37
walterluu 0:664d9df11a00 38 // Virtual serial port over USB TODO NEW VID PID NEEDED!!
walterluu 0:664d9df11a00 39 USBSerial pc(0x0B6A, 0x0042, 0x0001, false);
walterluu 0:664d9df11a00 40
walterluu 3:85fc843a9d7d 41 ///***************************************************************************
walterluu 3:85fc843a9d7d 42 // * Virtual COM Instantiation
walterluu 3:85fc843a9d7d 43 // **************************************************************************/
walterluu 3:85fc843a9d7d 44 //#include "USBSerial.h" // for virtual COM
walterluu 3:85fc843a9d7d 45 //#define BS 8 // ASCII Back Space
walterluu 3:85fc843a9d7d 46 //#define CR 13 // ASCII Carriage Return
walterluu 3:85fc843a9d7d 47 //// Virtual serial port over USB TODO NEW VID PID NEEDED!!
walterluu 3:85fc843a9d7d 48 //USBSerial pc(0x0B6A, 0x0042, 0x0001, false);
walterluu 3:85fc843a9d7d 49
walterluu 3:85fc843a9d7d 50 /***************************************************************************
walterluu 3:85fc843a9d7d 51 * LEDs Instantiation
walterluu 3:85fc843a9d7d 52 **************************************************************************/
walterluu 0:664d9df11a00 53 DigitalOut myled(LED2); // LED = LED2 green
walterluu 0:664d9df11a00 54 DigitalOut rLED(LED1); // red LED
walterluu 0:664d9df11a00 55 DigitalOut bLED(LED3); // blue LED
walterluu 3:85fc843a9d7d 56 //DigitalOut *led3;
walterluu 0:664d9df11a00 57
walterluu 3:85fc843a9d7d 58 /***************************************************************************
walterluu 3:85fc843a9d7d 59 * I2C Bus Instantiation
walterluu 3:85fc843a9d7d 60 **************************************************************************/
walterluu 3:85fc843a9d7d 61 I2C i2cBus0(P1_6, P1_7); // I2C of MAX32625PICO
walterluu 0:664d9df11a00 62
walterluu 0:664d9df11a00 63
walterluu 6:51f492ca61a2 64 bool get_data_flag = false; // used for data tramission frequency on the SENSOR side
walterluu 6:51f492ca61a2 65 bool print_data_flag = false; // used for data display on the GATEWAY side
walterluu 0:664d9df11a00 66
walterluu 3:85fc843a9d7d 67 //Timer setup
walterluu 6:51f492ca61a2 68 Ticker timer_1; // timer for data tramission frequency on the SENSOR side
walterluu 6:51f492ca61a2 69 Ticker timer_M; // timer for data print out on the GATEWAY side
walterluu 0:664d9df11a00 70
walterluu 3:85fc843a9d7d 71 void onTimerInterrupt(){
walterluu 3:85fc843a9d7d 72 get_data_flag = true;
walterluu 3:85fc843a9d7d 73 }
walterluu 0:664d9df11a00 74
walterluu 6:51f492ca61a2 75 void onGatewayInterrupt(){
walterluu 6:51f492ca61a2 76 print_data_flag = true;
walterluu 6:51f492ca61a2 77 }
walterluu 6:51f492ca61a2 78
walterluu 0:664d9df11a00 79 int main() {
walterluu 0:664d9df11a00 80
walterluu 3:85fc843a9d7d 81 /***************************************************************************
walterluu 0:664d9df11a00 82
walterluu 3:85fc843a9d7d 83
walterluu 3:85fc843a9d7d 84
walterluu 3:85fc843a9d7d 85 /* Setup begins here: */
walterluu 3:85fc843a9d7d 86 #if MASTER == 1 // Master Device
walterluu 6:51f492ca61a2 87 // pc.printf("MAX32625PICO: MASTER DEVICE\r\n");
walterluu 6:51f492ca61a2 88 // wait(1);
walterluu 3:85fc843a9d7d 89 #elif SLAVE == 1 // Slave Device
walterluu 6:51f492ca61a2 90 // pc.printf("MAX32625PICO: SLAVE DEVICE\r\n");
walterluu 6:51f492ca61a2 91 // wait(1);
walterluu 3:85fc843a9d7d 92 #endif
walterluu 3:85fc843a9d7d 93
walterluu 3:85fc843a9d7d 94 /* Introduction text: */
walterluu 6:51f492ca61a2 95 // pc.printf("Welcome to the SX1276GenericLib\r\n");
walterluu 3:85fc843a9d7d 96 // wait(5);
walterluu 6:51f492ca61a2 97 // pc.printf("Starting a simple LoRa PingPong\r\n");
walterluu 3:85fc843a9d7d 98 // wait(5);
walterluu 3:85fc843a9d7d 99
walterluu 3:85fc843a9d7d 100 /***************************************************************************
walterluu 3:85fc843a9d7d 101 * Combined Payload Buffers for LoRa Communications
walterluu 3:85fc843a9d7d 102 **************************************************************************/
walterluu 3:85fc843a9d7d 103 uint8_t BufferTx[BufferSizeTx]; // more info in global_buffers.h
walterluu 3:85fc843a9d7d 104 uint8_t BufferRx[BufferSizeRx]; // more info in global_buffers.h
walterluu 3:85fc843a9d7d 105
walterluu 3:85fc843a9d7d 106 /***************************************************************************
walterluu 3:85fc843a9d7d 107 * Identification Buffers
walterluu 3:85fc843a9d7d 108 **************************************************************************/
walterluu 3:85fc843a9d7d 109 #if MASTER == 1 // Master Device
walterluu 3:85fc843a9d7d 110 uint8_t ID_of_slave[size_signature];
walterluu 3:85fc843a9d7d 111 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 112 uint8_t ID_of_master[size_signature];
walterluu 3:85fc843a9d7d 113 #endif
walterluu 3:85fc843a9d7d 114
walterluu 3:85fc843a9d7d 115 /***************************************************************************
walterluu 3:85fc843a9d7d 116 * Dummy Data Buffers
walterluu 3:85fc843a9d7d 117 **************************************************************************/
walterluu 3:85fc843a9d7d 118 #if MASTER == 1 // Master Device
walterluu 6:51f492ca61a2 119 // uint8_t curr_dum_to_slave[size_of_dum];
walterluu 3:85fc843a9d7d 120 #elif SLAVE == 1 // Slave Device
walterluu 6:51f492ca61a2 121 // uint8_t curr_dum_from_master[size_of_dum];
walterluu 6:51f492ca61a2 122 // uint8_t prev_dum_from_master[size_of_dum];
walterluu 3:85fc843a9d7d 123 #endif
walterluu 3:85fc843a9d7d 124
walterluu 3:85fc843a9d7d 125 /***************************************************************************
walterluu 3:85fc843a9d7d 126 * MAX30208 Data Buffers
walterluu 3:85fc843a9d7d 127 **************************************************************************/
walterluu 3:85fc843a9d7d 128 #if MASTER == 1 // Master Device
walterluu 3:85fc843a9d7d 129 // uint8_t curr_MAX77650_from_slave[size_of_MAX77650];
walterluu 5:9e751733a6f3 130 // uint8_t curr_raw_temp_from_slave[size_of_MAX30208];
walterluu 5:9e751733a6f3 131 char curr_raw_temp_from_slave[size_of_MAX30208]; // to match data type
walterluu 3:85fc843a9d7d 132 // uint8_t prev_MAX77650_from_slave[size_of_MAX77650];
walterluu 6:51f492ca61a2 133 char prev_raw_temp_from_slave[size_of_MAX30208];
walterluu 3:85fc843a9d7d 134 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 135 // uint8_t curr_MAX77650_to_master[size_of_MAX77650];
walterluu 3:85fc843a9d7d 136 // bool chrg_status = false; //True = ON False = OFF
walterluu 3:85fc843a9d7d 137 uint8_t curr_raw_temp_to_master[size_of_MAX30208];
walterluu 3:85fc843a9d7d 138 #endif
walterluu 3:85fc843a9d7d 139
walterluu 0:664d9df11a00 140
walterluu 3:85fc843a9d7d 141 /***************************************************************************
walterluu 3:85fc843a9d7d 142 * MAX44009 Data Buffers
walterluu 3:85fc843a9d7d 143 **************************************************************************/
walterluu 3:85fc843a9d7d 144 #if MASTER == 1 // Master Device
walterluu 5:9e751733a6f3 145 // uint8_t curr_raw_light_from_slave[size_of_MAX44009];
walterluu 5:9e751733a6f3 146 char curr_raw_light_from_slave[size_of_MAX44009]; // to match data type
walterluu 6:51f492ca61a2 147 char prev_raw_light_from_slave[size_of_MAX44009];
walterluu 3:85fc843a9d7d 148 // static int16_t conv_frame_data_from_slave[64];
walterluu 3:85fc843a9d7d 149 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 150 uint8_t curr_raw_light_to_master[size_of_MAX44009];
walterluu 3:85fc843a9d7d 151 // static char prev_raw_light_data_to_master[size_of_MAX44009];
walterluu 3:85fc843a9d7d 152 // static int16_t conv_frame_data_to_master[64];
walterluu 3:85fc843a9d7d 153 #endif
walterluu 3:85fc843a9d7d 154
walterluu 3:85fc843a9d7d 155 /***************************************************************************
walterluu 3:85fc843a9d7d 156 * MAX20361 Data Buffers
walterluu 3:85fc843a9d7d 157 **************************************************************************/
walterluu 3:85fc843a9d7d 158 #if MASTER == 1 // Master Device
walterluu 5:9e751733a6f3 159 // uint8_t curr_raw_AO32_from_slave[size_of_MAX20361];
walterluu 5:9e751733a6f3 160 char curr_raw_AO32_from_slave[size_of_MAX20361]; // to match data type
walterluu 6:51f492ca61a2 161 char prev_raw_AO32_from_slave[size_of_MAX20361];
walterluu 3:85fc843a9d7d 162 // static int16_t conv_frame_data_from_slave[64];
walterluu 3:85fc843a9d7d 163 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 164 uint8_t curr_raw_AO32_to_master[size_of_MAX20361];
walterluu 3:85fc843a9d7d 165 // static char prev_raw_AO32_data_to_master[size_of_MAX20361];
walterluu 3:85fc843a9d7d 166 // static int16_t conv_frame_data_to_master[64];
walterluu 3:85fc843a9d7d 167 #endif
walterluu 0:664d9df11a00 168
walterluu 3:85fc843a9d7d 169 /***************************************************************************
walterluu 3:85fc843a9d7d 170 * Other Data Buffers
walterluu 3:85fc843a9d7d 171 **************************************************************************/
walterluu 3:85fc843a9d7d 172 #if MASTER == 1 // Master Device
walterluu 3:85fc843a9d7d 173 // uint8_t curr_raw_other_from_slave[size_of_other];
walterluu 3:85fc843a9d7d 174 // uint8_t prev_raw_other_from_slave[size_of_other];
walterluu 3:85fc843a9d7d 175 // static int16_t conv_frame_data_from_slave[64];
walterluu 3:85fc843a9d7d 176 #elif SLAVE == 1 // Slave Device
walterluu 3:85fc843a9d7d 177 // uint8_t curr_raw_other_to_master[size_of_other];
walterluu 3:85fc843a9d7d 178 // static char prev_raw_other_data_to_master[size_of_other];
walterluu 3:85fc843a9d7d 179 // static int16_t conv_frame_data_to_master[64];
walterluu 3:85fc843a9d7d 180 #endif
walterluu 3:85fc843a9d7d 181
walterluu 3:85fc843a9d7d 182 /***************************************************************************
walterluu 3:85fc843a9d7d 183 * Finish Setting up LoRa Radios: This passes in pointers to Buffers to send
walterluu 3:85fc843a9d7d 184 **************************************************************************/
walterluu 3:85fc843a9d7d 185 SX1276PingPongSetup(BufferTx, BufferRx, &pc);
walterluu 3:85fc843a9d7d 186
walterluu 3:85fc843a9d7d 187 // Pointer Tutorials
walterluu 3:85fc843a9d7d 188 // https://www.tutorialspoint.com/cprogramming/c_pointers.htm
walterluu 3:85fc843a9d7d 189
walterluu 3:85fc843a9d7d 190 /***************************************************************************
walterluu 3:85fc843a9d7d 191 * Create Dummy Data For Master and Slave
walterluu 3:85fc843a9d7d 192 **************************************************************************/
walterluu 3:85fc843a9d7d 193 // Array Tutorials
walterluu 3:85fc843a9d7d 194 // http://www.cplusplus.com/doc/tutorial/arrays/
walterluu 3:85fc843a9d7d 195 #if MASTER == 1
walterluu 3:85fc843a9d7d 196 // curr_dum_to_slave[0] = {33, 34};
walterluu 6:51f492ca61a2 197 // curr_dum_to_slave[0] = 33;
walterluu 6:51f492ca61a2 198 // curr_dum_to_slave[1] = 34;
walterluu 3:85fc843a9d7d 199 #endif
walterluu 0:664d9df11a00 200
walterluu 3:85fc843a9d7d 201 #if SLAVE == 1
walterluu 6:51f492ca61a2 202
walterluu 3:85fc843a9d7d 203 curr_raw_temp_to_master[0] = 99;
walterluu 3:85fc843a9d7d 204 curr_raw_temp_to_master[1] = 99;
walterluu 6:51f492ca61a2 205
walterluu 3:85fc843a9d7d 206 curr_raw_light_to_master[0] = 25;
walterluu 3:85fc843a9d7d 207 curr_raw_light_to_master[1] = 26;
walterluu 6:51f492ca61a2 208
walterluu 3:85fc843a9d7d 209 curr_raw_AO32_to_master[0] = 99;
walterluu 3:85fc843a9d7d 210 curr_raw_AO32_to_master[1] = 100;
walterluu 3:85fc843a9d7d 211 curr_raw_AO32_to_master[2] = 101;
walterluu 6:51f492ca61a2 212 curr_raw_AO32_to_master[3] = 102;
walterluu 3:85fc843a9d7d 213 #endif
walterluu 3:85fc843a9d7d 214
walterluu 3:85fc843a9d7d 215 /***************************************************************************
walterluu 3:85fc843a9d7d 216 * Loop Counter
walterluu 3:85fc843a9d7d 217 **************************************************************************/
walterluu 3:85fc843a9d7d 218 int loopCnt = 0;
walterluu 3:85fc843a9d7d 219
walterluu 6:51f492ca61a2 220 #if MASTER == 1
walterluu 6:51f492ca61a2 221 //************* init ticker timer callbacks ****************
walterluu 6:51f492ca61a2 222 timer_M.attach(&onGatewayInterrupt, 3); //Gateway data print out frequency
walterluu 6:51f492ca61a2 223
walterluu 6:51f492ca61a2 224 #endif
walterluu 6:51f492ca61a2 225
walterluu 3:85fc843a9d7d 226 #if SLAVE == 1
walterluu 3:85fc843a9d7d 227 //************* init ticker timer callbacks ****************
walterluu 6:51f492ca61a2 228 timer_1.attach(&onTimerInterrupt, 3); //Sensor data transmission frequency
walterluu 3:85fc843a9d7d 229
walterluu 6:51f492ca61a2 230 //************* OT07 Variables ****************
walterluu 3:85fc843a9d7d 231 char rawtempdata[2];
walterluu 3:85fc843a9d7d 232 char OT07_i2c_add = 0xA0;
walterluu 3:85fc843a9d7d 233
walterluu 3:85fc843a9d7d 234 //************* MAX44009 Variables ****************
walterluu 3:85fc843a9d7d 235 char rawluxdata[2];
walterluu 5:9e751733a6f3 236 char MAX44009_i2c_add = 0x94; // 0b1001 010x
walterluu 3:85fc843a9d7d 237
walterluu 3:85fc843a9d7d 238 //************* AO32 Variables ****************
walterluu 3:85fc843a9d7d 239 char rawOCVdata[2]; // only needs 1
walterluu 3:85fc843a9d7d 240 char rawCntdata[2];
walterluu 3:85fc843a9d7d 241 char AO32_i2c_add = 0x2A; // 0b0010 101x
walterluu 3:85fc843a9d7d 242
walterluu 6:51f492ca61a2 243 //************* AO19 Settings ****************
walterluu 6:51f492ca61a2 244 // Enable AO19
walterluu 6:51f492ca61a2 245 char AO19_i2c_add = 0xD0; //
walterluu 6:51f492ca61a2 246 char AO19_BB_CFG[2]; // store result of AO19's register 0x01 BBstCfg0
walterluu 6:51f492ca61a2 247 int AO19_read = AO19_read_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG);
walterluu 6:51f492ca61a2 248
walterluu 6:51f492ca61a2 249 // if (AO19_read) {
walterluu 6:51f492ca61a2 250 // pc.printf("AO19 Initial Read fail!\r\n");
walterluu 6:51f492ca61a2 251 // }
walterluu 6:51f492ca61a2 252 // else {
walterluu 6:51f492ca61a2 253 // pc.printf("AO19 Initial Read success!\r\n");
walterluu 6:51f492ca61a2 254 // }
walterluu 6:51f492ca61a2 255
walterluu 6:51f492ca61a2 256 int AO19_en = AO19_write_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG[0]|0x80);
walterluu 6:51f492ca61a2 257
walterluu 6:51f492ca61a2 258 // if (AO19_en) {
walterluu 6:51f492ca61a2 259 // pc.printf("AO19 Enabled fail!\r\n");
walterluu 6:51f492ca61a2 260 // }
walterluu 6:51f492ca61a2 261 // else {
walterluu 6:51f492ca61a2 262 // pc.printf("AO19 Enabledsuccess!\r\n");
walterluu 6:51f492ca61a2 263 // }
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 3:85fc843a9d7d 271 if(get_data_flag) {
walterluu 3:85fc843a9d7d 272
walterluu 3:85fc843a9d7d 273 //reset the flag
walterluu 3:85fc843a9d7d 274 get_data_flag = false;
walterluu 6:51f492ca61a2 275 // pc.printf("Timer interval reached!\r\n");
walterluu 3:85fc843a9d7d 276
walterluu 3:85fc843a9d7d 277 /***************************************************************************
walterluu 3:85fc843a9d7d 278 * Temperature Sensor Data Measurement
walterluu 3:85fc843a9d7d 279 **************************************************************************/
walterluu 3:85fc843a9d7d 280 // obtain register hex values
walterluu 3:85fc843a9d7d 281 convert_temperature(&i2cBus0, OT07_i2c_add); //send OW convert selected device
walterluu 3:85fc843a9d7d 282 wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete
walterluu 3:85fc843a9d7d 283 int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2);
walterluu 5:9e751733a6f3 284 // pc.printf("OT07 add[%02X] data[%02X] data[%02X]\r\n", OT07_FIFO_DATA, rawtempdata[0], rawtempdata[1]);
walterluu 3:85fc843a9d7d 285
walterluu 3:85fc843a9d7d 286 //calculate temperature from data
walterluu 6:51f492ca61a2 287 // int count = (int)(rawtempdata[0]*256 + rawtempdata[1]);
walterluu 6:51f492ca61a2 288 // if (count >= 32768)count = count - 65536; // 2s comp
walterluu 6:51f492ca61a2 289 // double Temp = (double)count*0.005;
walterluu 6:51f492ca61a2 290 // pc.printf("OT07 temperature[%.3f] status[%d]\r\n", Temp, temp_error);
walterluu 5:9e751733a6f3 291 double tempFinal = calc_temperature(rawtempdata);
walterluu 6:51f492ca61a2 292 // pc.printf("OT07 Final temperature[%.3f] \r\n", tempFinal);
walterluu 6:51f492ca61a2 293 // pc.printf("\r\n");
walterluu 5:9e751733a6f3 294
walterluu 3:85fc843a9d7d 295
walterluu 3:85fc843a9d7d 296 //fill raw temp data into the array
walterluu 3:85fc843a9d7d 297 curr_raw_temp_to_master[0] = rawtempdata[0];
walterluu 3:85fc843a9d7d 298 curr_raw_temp_to_master[1] = rawtempdata[1];
walterluu 0:664d9df11a00 299
walterluu 3:85fc843a9d7d 300 /***************************************************************************
walterluu 3:85fc843a9d7d 301 * Light Intensity Sensor Data Measurement
walterluu 3:85fc843a9d7d 302 **************************************************************************/
walterluu 3:85fc843a9d7d 303 // obtain register hex values
walterluu 5:9e751733a6f3 304 int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata);
walterluu 5:9e751733a6f3 305 // int lux_error1 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, &rawluxdata[0]);
walterluu 5:9e751733a6f3 306 // int lux_error2 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_LO, &rawluxdata[1]);
walterluu 5:9e751733a6f3 307 // pc.printf("MAX44009 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", MAX44009_LUX_HI, rawluxdata[0], MAX44009_LUX_LO, rawluxdata[1]);
walterluu 3:85fc843a9d7d 308
walterluu 3:85fc843a9d7d 309 //calculate temperature from data
walterluu 6:51f492ca61a2 310 // int exponent = int(rawluxdata[0] >> 4);
walterluu 6:51f492ca61a2 311 // int mantissa = (int)((rawluxdata[0] << 4) & 0xF0) + (int)(rawluxdata[1]);
walterluu 6:51f492ca61a2 312 // double lux = 0.045 * mantissa * pow((double) 2, exponent);
walterluu 5:9e751733a6f3 313 // pc.printf("MAX44009 exponent[%d] mantissa[%d]\r\n", exponent, mantissa);
walterluu 5:9e751733a6f3 314 // pc.printf("MAX44009 lux[%.2f] status[%d] status[%d]\r\n", lux, lux_error1, lux_error2);
walterluu 6:51f492ca61a2 315 // pc.printf("MAX44009 lux[%.2f] status[%d]\r\n", lux, lux_error);
walterluu 6:51f492ca61a2 316 int luxFinal = (int) (calc_lux(rawluxdata));
walterluu 6:51f492ca61a2 317 // pc.printf("MAX44009 Final Lux[%.2f] \r\n", luxFinal);
walterluu 6:51f492ca61a2 318 // pc.printf("\r\n");
walterluu 3:85fc843a9d7d 319
walterluu 3:85fc843a9d7d 320 //fill raw lux data into the array
walterluu 5:9e751733a6f3 321 curr_raw_light_to_master[0] = rawluxdata[0];
walterluu 5:9e751733a6f3 322 curr_raw_light_to_master[1] = rawluxdata[1];
walterluu 3:85fc843a9d7d 323
walterluu 3:85fc843a9d7d 324
walterluu 3:85fc843a9d7d 325 /***************************************************************************
walterluu 3:85fc843a9d7d 326 * Solar Harvester Data Measurement
walterluu 3:85fc843a9d7d 327 **************************************************************************/
walterluu 3:85fc843a9d7d 328 // obtain register hex values
walterluu 5:9e751733a6f3 329 // char AO32ID[2];
walterluu 5:9e751733a6f3 330 // int id_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_DEVICE_ID, AO32ID); // testing
walterluu 5:9e751733a6f3 331 // pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_DEVICE_ID, AO32ID[0]); // should be 0x00: 0x11
walterluu 3:85fc843a9d7d 332
walterluu 3:85fc843a9d7d 333 int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata);
walterluu 5:9e751733a6f3 334 // pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_VOC, rawOCVdata[0]);
walterluu 3:85fc843a9d7d 335 int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes
walterluu 5:9e751733a6f3 336 // pc.printf("AO32 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", AO32_HARV_H, rawCntdata[0], AO32_HARV_L, rawCntdata[1]);
walterluu 3:85fc843a9d7d 337
walterluu 3:85fc843a9d7d 338 //calculate open circuit voltage from data
walterluu 5:9e751733a6f3 339 double voltage = (double)(rawOCVdata[0]) / 100;
walterluu 6:51f492ca61a2 340 // pc.printf("AO32 OCV[%.2f] status[%d]\r\n", voltage, ocv_error);
walterluu 5:9e751733a6f3 341 double OCVFinal = calc_OCV(rawOCVdata);
walterluu 6:51f492ca61a2 342 // pc.printf("AO32 Final OCV[%.2f] \r\n", OCVFinal);
walterluu 6:51f492ca61a2 343 // pc.printf("\r\n");
walterluu 3:85fc843a9d7d 344
walterluu 3:85fc843a9d7d 345 //calculate harvesting counts from data
walterluu 6:51f492ca61a2 346 // int countHi = int(rawCntdata[0]) * 256;
walterluu 6:51f492ca61a2 347 // int countLo = int(rawCntdata[1]);
walterluu 6:51f492ca61a2 348 // int harvest_counts = countHi + countLo;
walterluu 6:51f492ca61a2 349 // pc.printf("AO32 HarvesterCnt[%d] status[%d]\r\n", harvest_counts, cnt_error);
walterluu 5:9e751733a6f3 350 int countFinal = calc_Harvest(rawCntdata);
walterluu 6:51f492ca61a2 351 // pc.printf("AO32 Final HarvesterCnt[%d]\r\n", countFinal);
walterluu 6:51f492ca61a2 352 // pc.printf("\r\n");
walterluu 5:9e751733a6f3 353
walterluu 3:85fc843a9d7d 354
walterluu 3:85fc843a9d7d 355 //fill raw AO32 data into the array
walterluu 5:9e751733a6f3 356 curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first
walterluu 5:9e751733a6f3 357 curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte
walterluu 5:9e751733a6f3 358 curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte
walterluu 0:664d9df11a00 359
walterluu 6:51f492ca61a2 360 // print out sensor data
walterluu 6:51f492ca61a2 361 pc.printf("SENSOR: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempFinal, luxFinal, OCVFinal, countFinal);
walterluu 6:51f492ca61a2 362
walterluu 3:85fc843a9d7d 363 /***************************************************************************
walterluu 3:85fc843a9d7d 364 * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
walterluu 3:85fc843a9d7d 365 **************************************************************************/
walterluu 3:85fc843a9d7d 366 memcpy(&BufferTx[tx_idx_signature], PongMsg, size_signature);
walterluu 3:85fc843a9d7d 367 memcpy(&BufferTx[tx_idx_MAX30208], curr_raw_temp_to_master, size_of_MAX30208);
walterluu 3:85fc843a9d7d 368 memcpy(&BufferTx[tx_idx_MAX44009], curr_raw_light_to_master, size_of_MAX44009);
walterluu 3:85fc843a9d7d 369 memcpy(&BufferTx[tx_idx_MAX20361], curr_raw_AO32_to_master, size_of_MAX20361);
walterluu 3:85fc843a9d7d 370 // memcpy(&BufferTx[tx_idx_other], curr_raw_other_to_master, size_of_other);
walterluu 3:85fc843a9d7d 371
walterluu 3:85fc843a9d7d 372 /***************************************************************************
walterluu 3:85fc843a9d7d 373 * In case of OnRxTimeout
walterluu 3:85fc843a9d7d 374 **************************************************************************/
walterluu 3:85fc843a9d7d 375 // Slave Device, these are values when LoRa communication did not happen
walterluu 3:85fc843a9d7d 376 // ID_of_master[0] = 'N'; // 0x4E or 78
walterluu 3:85fc843a9d7d 377 // ID_of_master[1] = 'A'; // 0x41 or 65
walterluu 3:85fc843a9d7d 378 // ID_of_master[2] = 'C'; // 0x43 or 67
walterluu 3:85fc843a9d7d 379 // ID_of_master[3] = 'K'; // 0x4B or 75
walterluu 3:85fc843a9d7d 380 // ID_of_master[4] = 'M'; // 0x4D or 77
walterluu 3:85fc843a9d7d 381 // ID_of_master[5] = 'A'; // 0x41 or 65
walterluu 3:85fc843a9d7d 382 // ID_of_master[6] = 'S'; // 0x53 or 83
walterluu 3:85fc843a9d7d 383 // ID_of_master[7] = '!'; // 0x21 or 33
walterluu 3:85fc843a9d7d 384 //
walterluu 3:85fc843a9d7d 385 // curr_dum_from_master[0] = 39;
walterluu 3:85fc843a9d7d 386 // curr_dum_from_master[1] = 40;
walterluu 3:85fc843a9d7d 387
walterluu 3:85fc843a9d7d 388 /***************************************************************************
walterluu 3:85fc843a9d7d 389 * LoRa Communication: Send Sensor Data
walterluu 3:85fc843a9d7d 390 **************************************************************************/
walterluu 3:85fc843a9d7d 391 // SX1276SensorSend();
walterluu 3:85fc843a9d7d 392 SX1276PingPong();
walterluu 6:51f492ca61a2 393 // int sendTime = TimeOnAirSend();
walterluu 6:51f492ca61a2 394 // pc.printf("Tx Time on Air: %d \r\n", sendTime);
walterluu 3:85fc843a9d7d 395
walterluu 3:85fc843a9d7d 396 /***************************************************************************
walterluu 3:85fc843a9d7d 397 * Fill Main Program Buffers With Data From Received Payload Buffer
walterluu 3:85fc843a9d7d 398 **************************************************************************/
walterluu 3:85fc843a9d7d 399 // Slave Device
walterluu 6:51f492ca61a2 400 // memcpy(ID_of_master, &BufferRx[rx_idx_signature], size_signature);
walterluu 6:51f492ca61a2 401 // memcpy(curr_dum_from_master, &BufferRx[rx_idx_dum], size_of_dum);
walterluu 3:85fc843a9d7d 402
walterluu 3:85fc843a9d7d 403 /***************************************************************************
walterluu 3:85fc843a9d7d 404 * Slave Device: Print out Master Data
walterluu 3:85fc843a9d7d 405 **************************************************************************/
walterluu 3:85fc843a9d7d 406 // memcpy(ID_of_master, &BufferRx[rx_idx_signature], size_signature);
walterluu 5:9e751733a6f3 407 // pc.printf("Print ID_of_master\r\n");
walterluu 5:9e751733a6f3 408 // for(int i = 0; i < sizeof(ID_of_master); i++){
walterluu 5:9e751733a6f3 409 // pc.printf("%d \r\n", ID_of_master[i]);
walterluu 5:9e751733a6f3 410 // }
walterluu 3:85fc843a9d7d 411
walterluu 3:85fc843a9d7d 412 // memcpy(curr_dum_from_master, &BufferRx[rx_idx_dum], size_of_dum);
walterluu 3:85fc843a9d7d 413 // pc.printf("Print Dum From Master\r\n");
walterluu 3:85fc843a9d7d 414 // for(int i = 0; i < sizeof(curr_dum_from_master); i++){
walterluu 3:85fc843a9d7d 415 // pc.printf("%d \r\n", curr_dum_from_master[i]);
walterluu 3:85fc843a9d7d 416 // }
walterluu 3:85fc843a9d7d 417
walterluu 3:85fc843a9d7d 418 // print loop counter
walterluu 6:51f492ca61a2 419 // pc.printf("Loop Counter Slave: %d \r\n", loopCnt);
walterluu 3:85fc843a9d7d 420 loopCnt = loopCnt + 1;
walterluu 3:85fc843a9d7d 421 } // end of transmission frequency for slave
walterluu 3:85fc843a9d7d 422 #endif
walterluu 3:85fc843a9d7d 423
walterluu 3:85fc843a9d7d 424
walterluu 3:85fc843a9d7d 425 #if MASTER == 1
walterluu 3:85fc843a9d7d 426 /***************************************************************************
walterluu 3:85fc843a9d7d 427 * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
walterluu 3:85fc843a9d7d 428 **************************************************************************/
walterluu 3:85fc843a9d7d 429 memcpy(&BufferTx[tx_idx_signature], PingMsg, size_signature);
walterluu 6:51f492ca61a2 430 // memcpy(&BufferTx[tx_idx_dum], curr_dum_to_slave, size_of_dum);
walterluu 3:85fc843a9d7d 431
walterluu 3:85fc843a9d7d 432 /***************************************************************************
walterluu 3:85fc843a9d7d 433 * LoRa Communication: Gateway Receive Sensor Data
walterluu 3:85fc843a9d7d 434 **************************************************************************/
walterluu 3:85fc843a9d7d 435 // SX1276GateWayReceive(333);
walterluu 3:85fc843a9d7d 436 SX1276PingPong();
walterluu 6:51f492ca61a2 437 // int sendTime = TimeOnAirSend();
walterluu 5:9e751733a6f3 438 // pc.printf("Tx Time on Air: %d \r\n", sendTime);
walterluu 3:85fc843a9d7d 439
walterluu 3:85fc843a9d7d 440 /***************************************************************************
walterluu 3:85fc843a9d7d 441 * Fill Main Program Buffers With Data From Received Payload Buffer
walterluu 3:85fc843a9d7d 442 **************************************************************************/
walterluu 3:85fc843a9d7d 443 memcpy(ID_of_slave, &BufferRx[rx_idx_signature], size_signature);
walterluu 3:85fc843a9d7d 444 memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208);
walterluu 3:85fc843a9d7d 445 memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
walterluu 3:85fc843a9d7d 446 memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361);
walterluu 3:85fc843a9d7d 447 // memcpy(curr_raw_other_from_slave, &BufferRx[rx_idx_other], size_of_other);
walterluu 3:85fc843a9d7d 448
walterluu 3:85fc843a9d7d 449 /***************************************************************************
walterluu 3:85fc843a9d7d 450 * Master Device: Print out Slave Data
walterluu 3:85fc843a9d7d 451 **************************************************************************/
walterluu 3:85fc843a9d7d 452
walterluu 3:85fc843a9d7d 453 // memcpy(ID_of_slave, &BufferRx[rx_idx_signature], size_signature);
walterluu 3:85fc843a9d7d 454 //pc.printf("Print ID_of_slave\r\n");
walterluu 3:85fc843a9d7d 455 // for(int i = 0; i < sizeof(ID_of_slave); i++){
walterluu 3:85fc843a9d7d 456 // pc.printf("%d \r\n", ID_of_slave[i]);
walterluu 3:85fc843a9d7d 457 // }
walterluu 3:85fc843a9d7d 458
walterluu 3:85fc843a9d7d 459 // memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208);
walterluu 5:9e751733a6f3 460 // pc.printf("Print MAX30208 data\r\n");
walterluu 5:9e751733a6f3 461 // for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){
walterluu 5:9e751733a6f3 462 // pc.printf("[%02X]\r\n", curr_raw_temp_from_slave[i]);
walterluu 5:9e751733a6f3 463 // }
walterluu 3:85fc843a9d7d 464
walterluu 5:9e751733a6f3 465 // int count = curr_raw_temp_from_slave[0] * 256 + curr_raw_temp_from_slave[1];
walterluu 5:9e751733a6f3 466 // if (count >= 32768)count = count - 65536; // 2s comp
walterluu 5:9e751733a6f3 467 // double tempResult = count * 0.005;
walterluu 5:9e751733a6f3 468
walterluu 5:9e751733a6f3 469 double tempResult = calc_temperature(curr_raw_temp_from_slave);
walterluu 5:9e751733a6f3 470 // pc.printf("MSG: [%.3f] [] [] [] []\r\n", tempResult);
walterluu 3:85fc843a9d7d 471
walterluu 3:85fc843a9d7d 472
walterluu 3:85fc843a9d7d 473 // memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
walterluu 5:9e751733a6f3 474 // pc.printf("Print MAX44009 data\r\n");
walterluu 3:85fc843a9d7d 475 // for(int i = 0; i < sizeof(curr_raw_light_from_slave); i++){
walterluu 5:9e751733a6f3 476 // pc.printf("[%02X] \r\n", curr_raw_light_from_slave[i]);
walterluu 3:85fc843a9d7d 477 // }
walterluu 5:9e751733a6f3 478
walterluu 6:51f492ca61a2 479 int luxResult = (int) calc_lux(curr_raw_light_from_slave);
walterluu 5:9e751733a6f3 480 // pc.printf("MSG: [%.3f] [%.2f] [] [] []\r\n", tempResult, luxResult);
walterluu 3:85fc843a9d7d 481
walterluu 3:85fc843a9d7d 482 // memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361);
walterluu 5:9e751733a6f3 483 // pc.printf("Print MAX20361 data\r\n");
walterluu 3:85fc843a9d7d 484 // for(int i = 0; i < sizeof(curr_raw_AO32_from_slave); i++){
walterluu 5:9e751733a6f3 485 // pc.printf("[%02X] \r\n", curr_raw_AO32_from_slave[i]);
walterluu 3:85fc843a9d7d 486 // }
walterluu 5:9e751733a6f3 487
walterluu 5:9e751733a6f3 488 char OCVrawHex[2];
walterluu 5:9e751733a6f3 489 OCVrawHex[0] = curr_raw_AO32_from_slave[0];
walterluu 5:9e751733a6f3 490 OCVrawHex[1] = curr_raw_AO32_from_slave[1];
walterluu 5:9e751733a6f3 491 char CntrawHex[2];
walterluu 5:9e751733a6f3 492 CntrawHex[0] = curr_raw_AO32_from_slave[2];
walterluu 5:9e751733a6f3 493 CntrawHex[1] = curr_raw_AO32_from_slave[3];
walterluu 5:9e751733a6f3 494
walterluu 5:9e751733a6f3 495 double OCVResult = calc_OCV(OCVrawHex);
walterluu 5:9e751733a6f3 496 int CntResult = calc_Harvest(CntrawHex);
walterluu 6:51f492ca61a2 497
walterluu 6:51f492ca61a2 498
walterluu 6:51f492ca61a2 499 // only print out new results
walterluu 6:51f492ca61a2 500 // int tempNew = memcmp(prev_raw_temp_from_slave, curr_raw_temp_from_slave, sizeof(size_of_MAX30208));
walterluu 6:51f492ca61a2 501 // int luxNew = memcmp(prev_raw_light_from_slave, curr_raw_light_from_slave, sizeof(size_of_MAX44009));
walterluu 6:51f492ca61a2 502 // int AO32New = memcmp(prev_raw_AO32_from_slave, curr_raw_AO32_from_slave, sizeof(size_of_MAX20361));
walterluu 6:51f492ca61a2 503
walterluu 6:51f492ca61a2 504 // if (tempNew != 0 || luxNew != 0 || AO32New != 0) {
walterluu 6:51f492ca61a2 505
walterluu 6:51f492ca61a2 506 // pc.printf("MSG: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempResult, luxResult, OCVResult, CntResult);
walterluu 6:51f492ca61a2 507
walterluu 3:85fc843a9d7d 508 // }
walterluu 3:85fc843a9d7d 509
walterluu 6:51f492ca61a2 510 if(print_data_flag) {
walterluu 6:51f492ca61a2 511
walterluu 6:51f492ca61a2 512 //reset the flag
walterluu 6:51f492ca61a2 513 print_data_flag = false;
walterluu 6:51f492ca61a2 514 pc.printf("MSG: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempResult, luxResult, OCVResult, CntResult);
walterluu 6:51f492ca61a2 515
walterluu 6:51f492ca61a2 516 }
walterluu 6:51f492ca61a2 517
walterluu 6:51f492ca61a2 518 // copy the current recceived data into previous data
walterluu 6:51f492ca61a2 519 // memcpy(prev_raw_temp_from_slave, curr_raw_temp_from_slave, sizeof(size_of_MAX30208));
walterluu 6:51f492ca61a2 520 // memcpy(prev_raw_light_from_slave, c/urr_raw_light_from_slave, sizeof(size_of_MAX44009));
walterluu 6:51f492ca61a2 521 // memcpy(prev_raw_AO32_from_slave, curr_raw_AO32_from_slave, sizeof(size_of_MAX20361));
walterluu 6:51f492ca61a2 522
walterluu 3:85fc843a9d7d 523 // print loop counter
walterluu 5:9e751733a6f3 524 // pc.printf("Loop Counter Master: %d \r\n", loopCnt);
walterluu 3:85fc843a9d7d 525 loopCnt = loopCnt + 1;
walterluu 3:85fc843a9d7d 526
walterluu 3:85fc843a9d7d 527 #endif
walterluu 3:85fc843a9d7d 528
walterluu 3:85fc843a9d7d 529 } // end of while(1) loop
walterluu 3:85fc843a9d7d 530
walterluu 6:51f492ca61a2 531 } // end of main()