
MAX20361 System Demo with Low Power 2 mode
Dependencies: SX1276GenericLib USBDevice
Fork of NonPingPong_PICO_LoRa by
Diff: main.cpp
- Revision:
- 5:9e751733a6f3
- Parent:
- 3:85fc843a9d7d
- Child:
- 6:51f492ca61a2
--- a/main.cpp Mon Oct 12 21:56:39 2020 +0000 +++ b/main.cpp Tue Oct 13 00:45:46 2020 +0000 @@ -120,10 +120,10 @@ **************************************************************************/ #if MASTER == 1 // Master Device // uint8_t curr_MAX77650_from_slave[size_of_MAX77650]; - uint8_t curr_raw_temp_from_slave[size_of_MAX30208]; +// uint8_t curr_raw_temp_from_slave[size_of_MAX30208]; + char curr_raw_temp_from_slave[size_of_MAX30208]; // to match data type // uint8_t prev_MAX77650_from_slave[size_of_MAX77650]; - uint8_t prev_raw_temp_from_slave[size_of_MAX30208]; -// bool chrg_status = false;; //True = ON False = OFF +// uint8_t prev_raw_temp_from_slave[size_of_MAX30208]; #elif SLAVE == 1 // Slave Device // uint8_t curr_MAX77650_to_master[size_of_MAX77650]; // bool chrg_status = false; //True = ON False = OFF @@ -135,8 +135,9 @@ * MAX44009 Data Buffers **************************************************************************/ #if MASTER == 1 // Master Device - uint8_t curr_raw_light_from_slave[size_of_MAX44009]; - uint8_t prev_raw_light_from_slave[size_of_MAX44009]; +// uint8_t curr_raw_light_from_slave[size_of_MAX44009]; + char curr_raw_light_from_slave[size_of_MAX44009]; // to match data type +// uint8_t prev_raw_light_from_slave[size_of_MAX44009]; // static int16_t conv_frame_data_from_slave[64]; #elif SLAVE == 1 // Slave Device uint8_t curr_raw_light_to_master[size_of_MAX44009]; @@ -148,8 +149,9 @@ * MAX20361 Data Buffers **************************************************************************/ #if MASTER == 1 // Master Device - uint8_t curr_raw_AO32_from_slave[size_of_MAX20361]; - uint8_t prev_raw_AO32_from_slave[size_of_MAX20361]; +// uint8_t curr_raw_AO32_from_slave[size_of_MAX20361]; + char curr_raw_AO32_from_slave[size_of_MAX20361]; // to match data type +// uint8_t prev_raw_AO32_from_slave[size_of_MAX20361]; // static int16_t conv_frame_data_from_slave[64]; #elif SLAVE == 1 // Slave Device uint8_t curr_raw_AO32_to_master[size_of_MAX20361]; @@ -237,7 +239,7 @@ //************* MAX44009 Variables **************** char rawluxdata[2]; - char MAX44009_i2c_add = 0x96; // 0b1001 011x + char MAX44009_i2c_add = 0x94; // 0b1001 010x //************* AO32 Variables **************** char rawOCVdata[2]; // only needs 1 @@ -268,73 +270,81 @@ convert_temperature(&i2cBus0, OT07_i2c_add); //send OW convert selected device wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2); - pc.printf("OT07 add[%02X] data[%02X] data[%02X]\r\n", OT07_FIFO_DATA, rawtempdata[0], rawtempdata[1]); +// pc.printf("OT07 add[%02X] data[%02X] data[%02X]\r\n", OT07_FIFO_DATA, rawtempdata[0], rawtempdata[1]); //calculate temperature from data int count = (int)(rawtempdata[0]*256 + rawtempdata[1]); if (count >= 32768)count = count - 65536; // 2s comp double Temp = (double)count*0.005; pc.printf("OT07 temperature[%.3f] status[%d]\r\n", Temp, temp_error); + double tempFinal = calc_temperature(rawtempdata); + pc.printf("OT07 Final temperature[%.3f] \r\n", tempFinal); + pc.printf("\r\n"); + //fill raw temp data into the array curr_raw_temp_to_master[0] = rawtempdata[0]; curr_raw_temp_to_master[1] = rawtempdata[1]; - - // for (int i = 0; i < 3; i++) { -// convert_temperature(&i2cBus0, i2c_add); //send OW convert selected device -// wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete -// T = get_temperature(&i2cBus0, i2c_add); -// pc.printf("OT07 temperature[%.3f] status[%d]\r\n", T.tempC, T.status); -// } /*************************************************************************** * Light Intensity Sensor Data Measurement **************************************************************************/ // obtain register hex values -// int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata); - int lux_error1 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, &rawluxdata[0]); - int lux_error2 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_LO, &rawluxdata[1]); - 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]); + int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata); +// int lux_error1 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, &rawluxdata[0]); +// int lux_error2 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_LO, &rawluxdata[1]); +// 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]); //calculate temperature from data int exponent = int(rawluxdata[0] >> 4); - int mantissa = int(rawluxdata[0] << 4) + int(rawluxdata[1]); + int mantissa = (int)((rawluxdata[0] << 4) & 0xF0) + (int)(rawluxdata[1]); double lux = 0.045 * mantissa * pow((double) 2, exponent); - pc.printf("MAX44009 exponent[%d] mantissa[%d]\r\n", exponent, mantissa); - pc.printf("MAX44009 lux[%f] status[%d] status[%d]\r\n", lux, lux_error1, lux_error2); +// pc.printf("MAX44009 exponent[%d] mantissa[%d]\r\n", exponent, mantissa); +// pc.printf("MAX44009 lux[%.2f] status[%d] status[%d]\r\n", lux, lux_error1, lux_error2); + pc.printf("MAX44009 lux[%.2f] status[%d]\r\n", lux, lux_error); + double luxFinal = calc_lux(rawluxdata); + pc.printf("MAX44009 Final Lux[%.2f] \r\n", luxFinal); + pc.printf("\r\n"); //fill raw lux data into the array -// curr_raw_light_to_master[0] = rawluxdata[0]; -// curr_raw_light_to_master[1] = rawluxdata[1]; + curr_raw_light_to_master[0] = rawluxdata[0]; + curr_raw_light_to_master[1] = rawluxdata[1]; /*************************************************************************** * Solar Harvester Data Measurement **************************************************************************/ // obtain register hex values - char AO32ID[2]; - int id_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_DEVICE_ID, AO32ID); // testing - pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_DEVICE_ID, AO32ID[0]); // should be 0x00: 0x11 +// char AO32ID[2]; +// int id_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_DEVICE_ID, AO32ID); // testing +// pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_DEVICE_ID, AO32ID[0]); // should be 0x00: 0x11 int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata); - pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_VOC, rawOCVdata[0]); +// pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_VOC, rawOCVdata[0]); int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes - 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]); +// 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]); //calculate open circuit voltage from data - double voltage = int(rawOCVdata[0]) / 100; + double voltage = (double)(rawOCVdata[0]) / 100; pc.printf("AO32 OCV[%.2f] status[%d]\r\n", voltage, ocv_error); + double OCVFinal = calc_OCV(rawOCVdata); + pc.printf("AO32 Final OCV[%.2f] \r\n", OCVFinal); + pc.printf("\r\n"); //calculate harvesting counts from data - int countHi = int(rawCntdata[0] << 8); // might cause trouble, * 256 instead? + int countHi = int(rawCntdata[0]) * 256; int countLo = int(rawCntdata[1]); int harvest_counts = countHi + countLo; pc.printf("AO32 HarvesterCnt[%d] status[%d]\r\n", harvest_counts, cnt_error); + int countFinal = calc_Harvest(rawCntdata); + pc.printf("AO32 Final HarvesterCnt[%d]\r\n", countFinal); + pc.printf("\r\n"); + //fill raw AO32 data into the array -// curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first -// curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte -// curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte + curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first + curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte + curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte /*************************************************************************** * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition @@ -380,10 +390,10 @@ * Slave Device: Print out Master Data **************************************************************************/ // memcpy(ID_of_master, &BufferRx[rx_idx_signature], size_signature); - pc.printf("Print ID_of_master\r\n"); - for(int i = 0; i < sizeof(ID_of_master); i++){ - pc.printf("%d \r\n", ID_of_master[i]); - } +// pc.printf("Print ID_of_master\r\n"); +// for(int i = 0; i < sizeof(ID_of_master); i++){ +// pc.printf("%d \r\n", ID_of_master[i]); +// } // memcpy(curr_dum_from_master, &BufferRx[rx_idx_dum], size_of_dum); // pc.printf("Print Dum From Master\r\n"); @@ -411,7 +421,7 @@ // SX1276GateWayReceive(333); SX1276PingPong(); int sendTime = TimeOnAirSend(); - pc.printf("Tx Time on Air: %d \r\n", sendTime); +// pc.printf("Tx Time on Air: %d \r\n", sendTime); /*************************************************************************** * Fill Main Program Buffers With Data From Received Payload Buffer @@ -433,30 +443,44 @@ // } // memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208); - pc.printf("Print MAX30208 data\r\n"); - for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){ - pc.printf("%d \r\n", curr_raw_temp_from_slave[i]); - } - +// pc.printf("Print MAX30208 data\r\n"); +// for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){ +// pc.printf("[%02X]\r\n", curr_raw_temp_from_slave[i]); +// } - int count = curr_raw_temp_from_slave[0] * 256 + curr_raw_temp_from_slave[1]; - if (count >= 32768)count = count - 65536; // 2s comp - double tempResult = count * 0.005; -// pc.printf("OT07 temperature[%.3f] status[%d]\r\n", Temp, error); - pc.printf("MSG: [%.3f] [] [] [] []\r\n", tempResult); +// int count = curr_raw_temp_from_slave[0] * 256 + curr_raw_temp_from_slave[1]; +// if (count >= 32768)count = count - 65536; // 2s comp +// double tempResult = count * 0.005; + + double tempResult = calc_temperature(curr_raw_temp_from_slave); +// pc.printf("MSG: [%.3f] [] [] [] []\r\n", tempResult); // memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009); - // pc.printf("Print MAX44009 data\r\n"); +// pc.printf("Print MAX44009 data\r\n"); // for(int i = 0; i < sizeof(curr_raw_light_from_slave); i++){ -// pc.printf("%d \r\n", curr_raw_light_from_slave[i]); +// pc.printf("[%02X] \r\n", curr_raw_light_from_slave[i]); // } + + double luxResult = calc_lux(curr_raw_light_from_slave); +// pc.printf("MSG: [%.3f] [%.2f] [] [] []\r\n", tempResult, luxResult); // memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361); - //pc.printf("Print MAX20361 data\r\n"); +// pc.printf("Print MAX20361 data\r\n"); // for(int i = 0; i < sizeof(curr_raw_AO32_from_slave); i++){ -// pc.printf("%d \r\n", curr_raw_AO32_from_slave[i]); +// pc.printf("[%02X] \r\n", curr_raw_AO32_from_slave[i]); // } + + char OCVrawHex[2]; + OCVrawHex[0] = curr_raw_AO32_from_slave[0]; + OCVrawHex[1] = curr_raw_AO32_from_slave[1]; + char CntrawHex[2]; + CntrawHex[0] = curr_raw_AO32_from_slave[2]; + CntrawHex[1] = curr_raw_AO32_from_slave[3]; + + double OCVResult = calc_OCV(OCVrawHex); + int CntResult = calc_Harvest(CntrawHex); + pc.printf("MSG: [%.3f] [%.2f] [%.2f] [%d] []\r\n", tempResult, luxResult, OCVResult, CntResult); // memcpy(curr_raw_other_from_slave, &BufferRx[rx_idx_other], size_of_other); //pc.printf("Print Other data\r\n"); @@ -465,7 +489,7 @@ // } // print loop counter - pc.printf("Loop Counter Master: %d \r\n", loopCnt); +// pc.printf("Loop Counter Master: %d \r\n", loopCnt); loopCnt = loopCnt + 1; // wait(3);