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@12:85b3174c8b30, 2022-05-25 (annotated)
- Committer:
- amir_chaudhary
- Date:
- Wed May 25 15:11:42 2022 +0000
- Revision:
- 12:85b3174c8b30
- Parent:
- 11:7a7913d47ca6
- Child:
- 13:f8d1a87594ec
Code to test the Pressure PCB
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 | 12:85b3174c8b30 | 7 | DigitalOut myGreenLed(D7); // ON = Lora Connected |
amir_chaudhary | 12:85b3174c8b30 | 8 | DigitalOut myBlueLed(PA_11); // Blink twice = Sends data or increments counter value Pelase proceed |
amir_chaudhary | 12:85b3174c8b30 | 9 | DigitalOut myRedLed(PB_15); |
amir_chaudhary | 12:85b3174c8b30 | 10 | |
amir_chaudhary | 12:85b3174c8b30 | 11 | DigitalOut LoraPin(PB_14); |
amir_chaudhary | 12:85b3174c8b30 | 12 | DigitalOut I2C1Pin(PB_12); |
amir_chaudhary | 12:85b3174c8b30 | 13 | DigitalOut I2C2Pin(PB_13); |
amir_chaudhary | 12:85b3174c8b30 | 14 | DigitalOut PWEN(PC_8); |
amir_chaudhary | 12:85b3174c8b30 | 15 | |
amir_chaudhary | 12:85b3174c8b30 | 16 | DigitalOut Pin51(PC_10); |
amir_chaudhary | 12:85b3174c8b30 | 17 | DigitalOut Pin52(PC_11); |
amir_chaudhary | 12:85b3174c8b30 | 18 | DigitalOut Pin53(PC_12); |
amir_chaudhary | 12:85b3174c8b30 | 19 | DigitalOut RM(PC_2); |
amir_chaudhary | 12:85b3174c8b30 | 20 | DigitalOut Light2(PC_0); |
amir_chaudhary | 12:85b3174c8b30 | 21 | DigitalOut Light1(PA_1); |
amir_chaudhary | 12:85b3174c8b30 | 22 | |
amir_chaudhary | 12:85b3174c8b30 | 23 | |
amir_chaudhary | 12:85b3174c8b30 | 24 | AnalogIn BAT_PIN_1(PC_5); |
amir_chaudhary | 12:85b3174c8b30 | 25 | AnalogIn BAT_PIN(A2); |
amir_chaudhary | 12:85b3174c8b30 | 26 | AnalogIn LIGHT_1_PIN(A1); |
amir_chaudhary | 12:85b3174c8b30 | 27 | AnalogIn LIGHT_2_PIN(A5); |
amir_chaudhary | 12:85b3174c8b30 | 28 | AnalogIn RH_PIN(PC_2); |
amir_chaudhary | 12:85b3174c8b30 | 29 | AnalogIn VCE_PIN(PB_1); |
amir_chaudhary | 12:85b3174c8b30 | 30 | DigitalOut relaypin(D6); |
amir_chaudhary | 12:85b3174c8b30 | 31 | AnalogIn Exit(PC_4); |
amir_chaudhary | 12:85b3174c8b30 | 32 | |
amir_chaudhary | 12:85b3174c8b30 | 33 | |
amir_chaudhary | 12:85b3174c8b30 | 34 | |
amir_chaudhary | 12:85b3174c8b30 | 35 | int count =0; |
amir_chaudhary | 12:85b3174c8b30 | 36 | float Vref = 3.342; |
amir_chaudhary | 12:85b3174c8b30 | 37 | |
amir_chaudhary | 12:85b3174c8b30 | 38 | |
amir_chaudhary | 11:7a7913d47ca6 | 39 | DigitalOut si7021_power_pin(PB_2); |
mluis | 0:92bca02df485 | 40 | |
amir_chaudhary | 11:7a7913d47ca6 | 41 | Serial pc(SERIAL_TX, SERIAL_RX,115200); |
mluis | 0:92bca02df485 | 42 | |
amir_chaudhary | 11:7a7913d47ca6 | 43 | void print_array(char *array, int len) { |
amir_chaudhary | 11:7a7913d47ca6 | 44 | for (int idx = 0; idx < len; idx++) { |
amir_chaudhary | 11:7a7913d47ca6 | 45 | pc.printf("%x", array[idx]); |
amir_chaudhary | 11:7a7913d47ca6 | 46 | } |
amir_chaudhary | 11:7a7913d47ca6 | 47 | pc.printf("\r\n"); |
mluis | 0:92bca02df485 | 48 | } |
mluis | 0:92bca02df485 | 49 | |
amir_chaudhary | 11:7a7913d47ca6 | 50 | float read_pressure_measurement() { |
amir_chaudhary | 11:7a7913d47ca6 | 51 | char output[9]; |
uss1994 | 10:f3b1186fc0b0 | 52 | |
amir_chaudhary | 11:7a7913d47ca6 | 53 | // Read measurements |
amir_chaudhary | 11:7a7913d47ca6 | 54 | if ( spd800_i2c.read((0x25 << 1), output, 9) != 0 ) { // read from register |
amir_chaudhary | 11:7a7913d47ca6 | 55 | pc.printf("FAILED TO READ PRESSURE: %d\r\n", spd800_i2c.read((0x25 << 1), output, 9)); |
mluis | 0:92bca02df485 | 56 | } |
amir_chaudhary | 11:7a7913d47ca6 | 57 | //print_array(output, 9); |
amir_chaudhary | 11:7a7913d47ca6 | 58 | |
uss1994 | 10:f3b1186fc0b0 | 59 | // Interpret |
uss1994 | 10:f3b1186fc0b0 | 60 | int16_t diffPressureTicks = (output[0] << 8) | output[1]; |
uss1994 | 10:f3b1186fc0b0 | 61 | // int16_t temperatureTicks = (output[3] << 8) | output[4]; |
uss1994 | 10:f3b1186fc0b0 | 62 | uint16_t scaleFactorDiffPressure = (output[6] << 8) | output[7]; |
amir_chaudhary | 11:7a7913d47ca6 | 63 | |
uss1994 | 10:f3b1186fc0b0 | 64 | float diffPressure = (float)diffPressureTicks / (float)scaleFactorDiffPressure; |
amir_chaudhary | 11:7a7913d47ca6 | 65 | |
uss1994 | 10:f3b1186fc0b0 | 66 | return diffPressure; |
uss1994 | 10:f3b1186fc0b0 | 67 | } |
uss1994 | 10:f3b1186fc0b0 | 68 | |
amir_chaudhary | 11:7a7913d47ca6 | 69 | int main() { |
amir_chaudhary | 11:7a7913d47ca6 | 70 | pc.printf("Starting Pressure/Temp/Humidity Sensor Test..\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 71 | |
amir_chaudhary | 12:85b3174c8b30 | 72 | // PWEN = 1; |
amir_chaudhary | 12:85b3174c8b30 | 73 | |
amir_chaudhary | 12:85b3174c8b30 | 74 | myGreenLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 75 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 76 | myGreenLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 77 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 78 | |
amir_chaudhary | 12:85b3174c8b30 | 79 | myRedLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 80 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 81 | myRedLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 82 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 83 | |
amir_chaudhary | 12:85b3174c8b30 | 84 | myBlueLed = 1; |
amir_chaudhary | 12:85b3174c8b30 | 85 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 86 | myBlueLed = 0; |
amir_chaudhary | 12:85b3174c8b30 | 87 | wait(0.25); |
amir_chaudhary | 12:85b3174c8b30 | 88 | |
amir_chaudhary | 12:85b3174c8b30 | 89 | |
amir_chaudhary | 12:85b3174c8b30 | 90 | |
amir_chaudhary | 12:85b3174c8b30 | 91 | for(int i=0; i<5; i++){ |
amir_chaudhary | 12:85b3174c8b30 | 92 | |
amir_chaudhary | 12:85b3174c8b30 | 93 | myGreenLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 94 | PWEN = 1; |
amir_chaudhary | 12:85b3174c8b30 | 95 | LoraPin = 1; |
amir_chaudhary | 12:85b3174c8b30 | 96 | I2C1Pin = 1; |
amir_chaudhary | 12:85b3174c8b30 | 97 | I2C2Pin = 1; |
amir_chaudhary | 12:85b3174c8b30 | 98 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 99 | myGreenLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 100 | |
amir_chaudhary | 12:85b3174c8b30 | 101 | myRedLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 102 | PWEN = 0; |
amir_chaudhary | 12:85b3174c8b30 | 103 | LoraPin = 0; |
amir_chaudhary | 12:85b3174c8b30 | 104 | I2C1Pin = 0; |
amir_chaudhary | 12:85b3174c8b30 | 105 | I2C2Pin = 0; |
amir_chaudhary | 12:85b3174c8b30 | 106 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 107 | myRedLed = 0;// LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 108 | |
amir_chaudhary | 12:85b3174c8b30 | 109 | pc.printf("%d\t",count); |
amir_chaudhary | 12:85b3174c8b30 | 110 | |
amir_chaudhary | 12:85b3174c8b30 | 111 | float meas_Vbat = BAT_PIN.read(); |
amir_chaudhary | 12:85b3174c8b30 | 112 | float Vbat = meas_Vbat*Vref; |
amir_chaudhary | 12:85b3174c8b30 | 113 | pc.printf("%.03f\n\n\r", Vbat); |
amir_chaudhary | 12:85b3174c8b30 | 114 | |
amir_chaudhary | 12:85b3174c8b30 | 115 | |
amir_chaudhary | 12:85b3174c8b30 | 116 | count++; |
amir_chaudhary | 12:85b3174c8b30 | 117 | |
amir_chaudhary | 12:85b3174c8b30 | 118 | } |
amir_chaudhary | 12:85b3174c8b30 | 119 | |
amir_chaudhary | 12:85b3174c8b30 | 120 | myBlueLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 121 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 122 | myBlueLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 123 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 124 | |
amir_chaudhary | 12:85b3174c8b30 | 125 | myRedLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 126 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 127 | myRedLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 128 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 129 | |
amir_chaudhary | 12:85b3174c8b30 | 130 | wait(1); |
uss1994 | 10:f3b1186fc0b0 | 131 | |
amir_chaudhary | 11:7a7913d47ca6 | 132 | char cont_measure_command[2] = {0x36, 0x1E}; |
amir_chaudhary | 11:7a7913d47ca6 | 133 | char single_measure_command[2] = {0x36, 0x2F}; |
amir_chaudhary | 11:7a7913d47ca6 | 134 | char stop_command[2] = {0x3F, 0xF9}; |
amir_chaudhary | 11:7a7913d47ca6 | 135 | char reset_command[1] = {0x06}; |
uss1994 | 10:f3b1186fc0b0 | 136 | |
amir_chaudhary | 11:7a7913d47ca6 | 137 | // Reset the pressure sensor |
amir_chaudhary | 11:7a7913d47ca6 | 138 | pc.printf("Resetting Pressure Sensor...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 139 | if ( spd800_i2c.write(0x00, reset_command, 1) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 140 | pc.printf("RESET FAILED!\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 141 | } |
uss1994 | 10:f3b1186fc0b0 | 142 | |
uss1994 | 10:f3b1186fc0b0 | 143 | // set up SHT31 |
uss1994 | 10:f3b1186fc0b0 | 144 | si7021_power_pin = 1; |
amir_chaudhary | 12:85b3174c8b30 | 145 | // Si7021 si7021 = Si7021(PB_9, PB_8); |
amir_chaudhary | 12:85b3174c8b30 | 146 | Si7021 si7021 = Si7021(PB_11, PB_10); |
amir_chaudhary | 12:85b3174c8b30 | 147 | |
amir_chaudhary | 12:85b3174c8b30 | 148 | myGreenLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 149 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 150 | myGreenLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 151 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 152 | |
amir_chaudhary | 12:85b3174c8b30 | 153 | myBlueLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 154 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 155 | myBlueLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 156 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 157 | |
amir_chaudhary | 11:7a7913d47ca6 | 158 | |
uss1994 | 10:f3b1186fc0b0 | 159 | wait(1); |
uss1994 | 10:f3b1186fc0b0 | 160 | |
uss1994 | 10:f3b1186fc0b0 | 161 | |
amir_chaudhary | 11:7a7913d47ca6 | 162 | // Take a few manual measurements |
amir_chaudhary | 11:7a7913d47ca6 | 163 | while( true ) { |
amir_chaudhary | 12:85b3174c8b30 | 164 | |
amir_chaudhary | 12:85b3174c8b30 | 165 | |
amir_chaudhary | 11:7a7913d47ca6 | 166 | pc.printf("\r\n\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 167 | pc.printf("Measuring Pressure...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 168 | if ( spd800_i2c.write((0x25 << 1), single_measure_command, 2) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 169 | pc.printf("FAILED TO WRITE TO PRESSURE SENSOR\r\n"); |
mluis | 0:92bca02df485 | 170 | } |
amir_chaudhary | 11:7a7913d47ca6 | 171 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 172 | |
amir_chaudhary | 12:85b3174c8b30 | 173 | |
amir_chaudhary | 11:7a7913d47ca6 | 174 | pc.printf("Measuring Temp/Humidity...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 175 | if ( !si7021.check() ) { |
amir_chaudhary | 11:7a7913d47ca6 | 176 | pc.printf("TEMP/HUMIDITY SENSOR NOT WORKING\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 177 | } else { |
amir_chaudhary | 11:7a7913d47ca6 | 178 | si7021.measure(); |
amir_chaudhary | 11:7a7913d47ca6 | 179 | } |
amir_chaudhary | 12:85b3174c8b30 | 180 | |
amir_chaudhary | 12:85b3174c8b30 | 181 | |
amir_chaudhary | 11:7a7913d47ca6 | 182 | pc.printf("Humidity: %d\r\n", si7021.get_humidity()); |
amir_chaudhary | 11:7a7913d47ca6 | 183 | pc.printf("Temperature: %d\r\n", si7021.get_temperature()); |
amir_chaudhary | 11:7a7913d47ca6 | 184 | pc.printf("Pressure: %f\r\n", read_pressure_measurement()); |
amir_chaudhary | 11:7a7913d47ca6 | 185 | wait(1); |
amir_chaudhary | 12:85b3174c8b30 | 186 | |
amir_chaudhary | 12:85b3174c8b30 | 187 | myGreenLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 188 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 189 | myGreenLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 190 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 191 | |
amir_chaudhary | 12:85b3174c8b30 | 192 | myBlueLed = 1; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 193 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 194 | myBlueLed = 0; // LED is ON |
amir_chaudhary | 12:85b3174c8b30 | 195 | wait(0.05); |
amir_chaudhary | 12:85b3174c8b30 | 196 | |
mluis | 3:9c6f7f082151 | 197 | |
amir_chaudhary | 11:7a7913d47ca6 | 198 | } |
amir_chaudhary | 11:7a7913d47ca6 | 199 | |
amir_chaudhary | 11:7a7913d47ca6 | 200 | |
amir_chaudhary | 11:7a7913d47ca6 | 201 | |
amir_chaudhary | 11:7a7913d47ca6 | 202 | |
amir_chaudhary | 11:7a7913d47ca6 | 203 | /*// Start Pressure Measurements |
amir_chaudhary | 11:7a7913d47ca6 | 204 | pc.printf("Starting Measurements...\r\n"); |
amir_chaudhary | 11:7a7913d47ca6 | 205 | if ( i2c.write((0x25 << 1), cont_measure_command, 2) != 0 ) { |
amir_chaudhary | 11:7a7913d47ca6 | 206 | pc.printf("START COMMAND FAILED!\r\n"); |
mluis | 0:92bca02df485 | 207 | } |
amir_chaudhary | 11:7a7913d47ca6 | 208 | wait(1); |
amir_chaudhary | 11:7a7913d47ca6 | 209 | |
amir_chaudhary | 11:7a7913d47ca6 | 210 | while( true ) { |
amir_chaudhary | 11:7a7913d47ca6 | 211 | pc.printf("%f\r\n", read_measurement()); |
amir_chaudhary | 11:7a7913d47ca6 | 212 | wait(1); |
amir_chaudhary | 11:7a7913d47ca6 | 213 | }*/ |
amir_chaudhary | 11:7a7913d47ca6 | 214 | |
amir_chaudhary | 11:7a7913d47ca6 | 215 | |
mluis | 0:92bca02df485 | 216 | } |