Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed LoRaWAN-lib SX1276Lib
app/main.cpp@11:7a7913d47ca6, 2021-12-10 (annotated)
- Committer:
- amir_chaudhary
- Date:
- Fri Dec 10 15:56:33 2021 +0000
- Revision:
- 11:7a7913d47ca6
- Parent:
- 10:f3b1186fc0b0
- Child:
- 12:85b3174c8b30
Temp, Humidity and Diff Pressure
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mluis | 0:92bca02df485 | 1 | #include "mbed.h" |
uss1994 | 10:f3b1186fc0b0 | 2 | #include "Si7021.h" |
uss1994 | 10:f3b1186fc0b0 | 3 | |
uss1994 | 10:f3b1186fc0b0 | 4 | // I2C Definition |
amir_chaudhary | 11:7a7913d47ca6 | 5 | I2C spd800_i2c(PB_9, PB_8); //sda, scl |
mluis | 0:92bca02df485 | 6 | |
amir_chaudhary | 11:7a7913d47ca6 | 7 | DigitalOut si7021_power_pin(PB_2); |
mluis | 0:92bca02df485 | 8 | |
amir_chaudhary | 11:7a7913d47ca6 | 9 | Serial pc(SERIAL_TX, SERIAL_RX,115200); |
mluis | 0:92bca02df485 | 10 | |
amir_chaudhary | 11:7a7913d47ca6 | 11 | void print_array(char *array, int len) { |
amir_chaudhary | 11:7a7913d47ca6 | 12 | for (int idx = 0; idx < len; idx++) { |
amir_chaudhary | 11:7a7913d47ca6 | 13 | pc.printf("%x", array[idx]); |
amir_chaudhary | 11:7a7913d47ca6 | 14 | } |
amir_chaudhary | 11:7a7913d47ca6 | 15 | pc.printf("\r\n"); |
mluis | 0:92bca02df485 | 16 | } |
mluis | 0:92bca02df485 | 17 | |
amir_chaudhary | 11:7a7913d47ca6 | 18 | float read_pressure_measurement() { |
amir_chaudhary | 11:7a7913d47ca6 | 19 | char output[9]; |
uss1994 | 10:f3b1186fc0b0 | 20 | |
amir_chaudhary | 11:7a7913d47ca6 | 21 | // Read measurements |
amir_chaudhary | 11:7a7913d47ca6 | 22 | if ( spd800_i2c.read((0x25 << 1), output, 9) != 0 ) { // read from register |
amir_chaudhary | 11:7a7913d47ca6 | 23 | pc.printf("FAILED TO READ PRESSURE: %d\r\n", spd800_i2c.read((0x25 << 1), output, 9)); |
mluis | 0:92bca02df485 | 24 | } |
amir_chaudhary | 11:7a7913d47ca6 | 25 | //print_array(output, 9); |
amir_chaudhary | 11:7a7913d47ca6 | 26 | |
uss1994 | 10:f3b1186fc0b0 | 27 | // Interpret |
uss1994 | 10:f3b1186fc0b0 | 28 | int16_t diffPressureTicks = (output[0] << 8) | output[1]; |
uss1994 | 10:f3b1186fc0b0 | 29 | // int16_t temperatureTicks = (output[3] << 8) | output[4]; |
uss1994 | 10:f3b1186fc0b0 | 30 | uint16_t scaleFactorDiffPressure = (output[6] << 8) | output[7]; |
amir_chaudhary | 11:7a7913d47ca6 | 31 | |
uss1994 | 10:f3b1186fc0b0 | 32 | float diffPressure = (float)diffPressureTicks / (float)scaleFactorDiffPressure; |
amir_chaudhary | 11:7a7913d47ca6 | 33 | |
uss1994 | 10:f3b1186fc0b0 | 34 | return diffPressure; |
uss1994 | 10:f3b1186fc0b0 | 35 | } |
uss1994 | 10:f3b1186fc0b0 | 36 | |
amir_chaudhary | 11:7a7913d47ca6 | 37 | int main() { |
amir_chaudhary | 11:7a7913d47ca6 | 38 | pc.printf("Starting Pressure/Temp/Humidity Sensor Test..\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 39 | |
uss1994 | 10:f3b1186fc0b0 | 40 | wait(3); |
uss1994 | 10:f3b1186fc0b0 | 41 | |
amir_chaudhary | 11:7a7913d47ca6 | 42 | char cont_measure_command[2] = {0x36, 0x1E}; |
amir_chaudhary | 11:7a7913d47ca6 | 43 | char single_measure_command[2] = {0x36, 0x2F}; |
amir_chaudhary | 11:7a7913d47ca6 | 44 | char stop_command[2] = {0x3F, 0xF9}; |
amir_chaudhary | 11:7a7913d47ca6 | 45 | char reset_command[1] = {0x06}; |
uss1994 | 10:f3b1186fc0b0 | 46 | |
amir_chaudhary | 11:7a7913d47ca6 | 47 | // Reset the pressure sensor |
amir_chaudhary | 11:7a7913d47ca6 | 48 | pc.printf("Resetting Pressure Sensor...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 49 | if ( spd800_i2c.write(0x00, reset_command, 1) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 50 | pc.printf("RESET FAILED!\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 51 | } |
uss1994 | 10:f3b1186fc0b0 | 52 | |
uss1994 | 10:f3b1186fc0b0 | 53 | // set up SHT31 |
uss1994 | 10:f3b1186fc0b0 | 54 | si7021_power_pin = 1; |
amir_chaudhary | 11:7a7913d47ca6 | 55 | Si7021 si7021 = Si7021(PB_9, PB_8); |
amir_chaudhary | 11:7a7913d47ca6 | 56 | |
uss1994 | 10:f3b1186fc0b0 | 57 | wait(1); |
uss1994 | 10:f3b1186fc0b0 | 58 | |
uss1994 | 10:f3b1186fc0b0 | 59 | |
amir_chaudhary | 11:7a7913d47ca6 | 60 | // Take a few manual measurements |
amir_chaudhary | 11:7a7913d47ca6 | 61 | while( true ) { |
amir_chaudhary | 11:7a7913d47ca6 | 62 | pc.printf("\r\n\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 63 | pc.printf("Measuring Pressure...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 64 | if ( spd800_i2c.write((0x25 << 1), single_measure_command, 2) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 65 | pc.printf("FAILED TO WRITE TO PRESSURE SENSOR\r\n"); |
mluis | 0:92bca02df485 | 66 | } |
amir_chaudhary | 11:7a7913d47ca6 | 67 | wait(1); |
amir_chaudhary | 11:7a7913d47ca6 | 68 | pc.printf("Measuring Temp/Humidity...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 69 | if ( !si7021.check() ) { |
amir_chaudhary | 11:7a7913d47ca6 | 70 | pc.printf("TEMP/HUMIDITY SENSOR NOT WORKING\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 71 | } else { |
amir_chaudhary | 11:7a7913d47ca6 | 72 | si7021.measure(); |
amir_chaudhary | 11:7a7913d47ca6 | 73 | } |
amir_chaudhary | 11:7a7913d47ca6 | 74 | pc.printf("Humidity: %d\r\n", si7021.get_humidity()); |
amir_chaudhary | 11:7a7913d47ca6 | 75 | pc.printf("Temperature: %d\r\n", si7021.get_temperature()); |
amir_chaudhary | 11:7a7913d47ca6 | 76 | pc.printf("Pressure: %f\r\n", read_pressure_measurement()); |
amir_chaudhary | 11:7a7913d47ca6 | 77 | wait(1); |
mluis | 3:9c6f7f082151 | 78 | |
amir_chaudhary | 11:7a7913d47ca6 | 79 | } |
amir_chaudhary | 11:7a7913d47ca6 | 80 | |
amir_chaudhary | 11:7a7913d47ca6 | 81 | |
amir_chaudhary | 11:7a7913d47ca6 | 82 | |
amir_chaudhary | 11:7a7913d47ca6 | 83 | |
amir_chaudhary | 11:7a7913d47ca6 | 84 | /*// Start Pressure Measurements |
amir_chaudhary | 11:7a7913d47ca6 | 85 | pc.printf("Starting Measurements...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 86 | if ( i2c.write((0x25 << 1), cont_measure_command, 2) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 87 | pc.printf("START COMMAND FAILED!\r\n"); |
mluis | 0:92bca02df485 | 88 | } |
amir_chaudhary | 11:7a7913d47ca6 | 89 | wait(1); |
amir_chaudhary | 11:7a7913d47ca6 | 90 | |
amir_chaudhary | 11:7a7913d47ca6 | 91 | while( true ) { |
amir_chaudhary | 11:7a7913d47ca6 | 92 | pc.printf("%f\r\n", read_measurement()); |
amir_chaudhary | 11:7a7913d47ca6 | 93 | wait(1); |
amir_chaudhary | 11:7a7913d47ca6 | 94 | }*/ |
amir_chaudhary | 11:7a7913d47ca6 | 95 | |
amir_chaudhary | 11:7a7913d47ca6 | 96 | |
mluis | 0:92bca02df485 | 97 | } |