![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
SOFT253 Coursework Weather Reader
Fork of Soft253-WeatherReader by
main.cpp@4:edef041d2094, 2017-04-28 (annotated)
- Committer:
- Jdumpleton3
- Date:
- Fri Apr 28 13:47:23 2017 +0000
- Revision:
- 4:edef041d2094
- Parent:
- 3:d17f07a0d08d
- Child:
- 5:ba160e9778d0
Add date time to the structure.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jdumpleton3 | 0:b490b8486404 | 1 | #include "mbed.h" |
Jdumpleton3 | 0:b490b8486404 | 2 | #include "rtos.h" |
Jdumpleton3 | 0:b490b8486404 | 3 | #include "hts221.h" |
Jdumpleton3 | 0:b490b8486404 | 4 | #include "LPS25H.h" |
Jdumpleton3 | 1:8585a8d417dc | 5 | #include "DataGenerator.h" |
Jdumpleton3 | 4:edef041d2094 | 6 | #include <string> |
Jdumpleton3 | 0:b490b8486404 | 7 | |
Jdumpleton3 | 2:27b92722246b | 8 | //Complex.Variables |
Jdumpleton3 | 0:b490b8486404 | 9 | DigitalOut myled(LED1); |
Jdumpleton3 | 0:b490b8486404 | 10 | I2C i2c2(I2C_SDA, I2C_SCL); |
Jdumpleton3 | 2:27b92722246b | 11 | Ticker dataTimer; |
Jdumpleton3 | 0:b490b8486404 | 12 | |
Jdumpleton3 | 2:27b92722246b | 13 | //Method Headers |
Jdumpleton3 | 2:27b92722246b | 14 | void readData(); |
Jdumpleton3 | 2:27b92722246b | 15 | void createDataThread(); |
Jdumpleton3 | 2:27b92722246b | 16 | void printData(); |
jedward | 3:d17f07a0d08d | 17 | void storeNewRecord(); |
Jdumpleton3 | 2:27b92722246b | 18 | |
Jdumpleton3 | 2:27b92722246b | 19 | //Prim.Variables |
Jdumpleton3 | 0:b490b8486404 | 20 | float tempCelsius = 25.50; |
Jdumpleton3 | 0:b490b8486404 | 21 | float humi = 55; |
Jdumpleton3 | 2:27b92722246b | 22 | float barometerPressure = 0; |
Jdumpleton3 | 2:27b92722246b | 23 | float barometerTemperature = 0; |
Jdumpleton3 | 4:edef041d2094 | 24 | float dataReadTime = 2.0; |
Jdumpleton3 | 0:b490b8486404 | 25 | int humiMax = 100; |
Jdumpleton3 | 0:b490b8486404 | 26 | char cmd=0; |
Jdumpleton3 | 0:b490b8486404 | 27 | uint32_t seconds = 0, minutes=0, hours=0; |
jedward | 3:d17f07a0d08d | 28 | int headNode = 0; |
jedward | 3:d17f07a0d08d | 29 | int currentNode = 0; |
jedward | 3:d17f07a0d08d | 30 | const int maxNumRecords = 120; |
Jdumpleton3 | 4:edef041d2094 | 31 | time_t sec; |
Jdumpleton3 | 2:27b92722246b | 32 | //Can't print data in a ticker method (not interrupt safe) |
Jdumpleton3 | 2:27b92722246b | 33 | //This is set once we have got new data, so it can be printed safely later |
Jdumpleton3 | 2:27b92722246b | 34 | bool isNewData=false; |
Jdumpleton3 | 0:b490b8486404 | 35 | |
Jdumpleton3 | 2:27b92722246b | 36 | // Test Data generator setup |
Jdumpleton3 | 1:8585a8d417dc | 37 | DataGenerator dataGen; |
Jdumpleton3 | 0:b490b8486404 | 38 | |
jedward | 3:d17f07a0d08d | 39 | struct dataEntry{ |
jedward | 3:d17f07a0d08d | 40 | float airTemp; |
jedward | 3:d17f07a0d08d | 41 | float airPress; |
jedward | 3:d17f07a0d08d | 42 | float barTemp; |
jedward | 3:d17f07a0d08d | 43 | float barPress; |
Jdumpleton3 | 4:edef041d2094 | 44 | string dt; |
jedward | 3:d17f07a0d08d | 45 | }tempEntry; |
jedward | 3:d17f07a0d08d | 46 | |
jedward | 3:d17f07a0d08d | 47 | dataEntry storedDataArray [maxNumRecords]; |
jedward | 3:d17f07a0d08d | 48 | |
Jdumpleton3 | 1:8585a8d417dc | 49 | int main(){ |
Jdumpleton3 | 1:8585a8d417dc | 50 | printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r"); |
Jdumpleton3 | 1:8585a8d417dc | 51 | printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r"); |
Jdumpleton3 | 1:8585a8d417dc | 52 | |
Jdumpleton3 | 2:27b92722246b | 53 | dataTimer.attach(&readData, dataReadTime); //Attach timer to data reader. |
Jdumpleton3 | 0:b490b8486404 | 54 | |
Jdumpleton3 | 4:edef041d2094 | 55 | |
Jdumpleton3 | 1:8585a8d417dc | 56 | while(1) |
Jdumpleton3 | 0:b490b8486404 | 57 | { |
Jdumpleton3 | 2:27b92722246b | 58 | if (isNewData == true){ |
jedward | 3:d17f07a0d08d | 59 | storeNewRecord(); |
Jdumpleton3 | 2:27b92722246b | 60 | printData(); |
Jdumpleton3 | 2:27b92722246b | 61 | } |
Jdumpleton3 | 1:8585a8d417dc | 62 | |
Jdumpleton3 | 4:edef041d2094 | 63 | sec = time(NULL); |
Jdumpleton3 | 4:edef041d2094 | 64 | |
Jdumpleton3 | 1:8585a8d417dc | 65 | /* Flicker the LED. */ |
Jdumpleton3 | 0:b490b8486404 | 66 | myled = 1; // LED is ON |
Jdumpleton3 | 0:b490b8486404 | 67 | Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds! |
Jdumpleton3 | 0:b490b8486404 | 68 | myled = 0; // LED is OFF |
Jdumpleton3 | 0:b490b8486404 | 69 | Thread::wait(100); // 100 ms |
Jdumpleton3 | 2:27b92722246b | 70 | } |
Jdumpleton3 | 2:27b92722246b | 71 | } |
Jdumpleton3 | 2:27b92722246b | 72 | |
jedward | 3:d17f07a0d08d | 73 | void storeNewRecord(){ |
jedward | 3:d17f07a0d08d | 74 | |
jedward | 3:d17f07a0d08d | 75 | if(headNode>=120){ |
jedward | 3:d17f07a0d08d | 76 | headNode = 0; |
jedward | 3:d17f07a0d08d | 77 | } |
jedward | 3:d17f07a0d08d | 78 | |
Jdumpleton3 | 4:edef041d2094 | 79 | tempEntry.dt = ctime(&sec); |
Jdumpleton3 | 4:edef041d2094 | 80 | |
jedward | 3:d17f07a0d08d | 81 | storedDataArray[headNode] = tempEntry; |
jedward | 3:d17f07a0d08d | 82 | currentNode = headNode; |
jedward | 3:d17f07a0d08d | 83 | headNode++; |
jedward | 3:d17f07a0d08d | 84 | } |
jedward | 3:d17f07a0d08d | 85 | |
Jdumpleton3 | 2:27b92722246b | 86 | /* Reads all the data in whenever the ticker interrupt is called */ |
Jdumpleton3 | 2:27b92722246b | 87 | void readData(){ |
Jdumpleton3 | 2:27b92722246b | 88 | //Check if old data has been printed if it hasn't don't do anything |
Jdumpleton3 | 2:27b92722246b | 89 | //As you have interrupted printdata section. |
Jdumpleton3 | 2:27b92722246b | 90 | if (isNewData == false){ |
jedward | 3:d17f07a0d08d | 91 | //Random data CHANGE ME |
Jdumpleton3 | 4:edef041d2094 | 92 | |
Jdumpleton3 | 2:27b92722246b | 93 | dataGen.ReadTempHumi(&tempCelsius, &humi); |
Jdumpleton3 | 2:27b92722246b | 94 | |
Jdumpleton3 | 2:27b92722246b | 95 | barometerPressure = dataGen.pressure(); |
Jdumpleton3 | 2:27b92722246b | 96 | barometerTemperature = dataGen.temperature(); |
Jdumpleton3 | 2:27b92722246b | 97 | |
jedward | 3:d17f07a0d08d | 98 | tempEntry.airTemp = tempCelsius; |
jedward | 3:d17f07a0d08d | 99 | tempEntry.airPress = humi; |
jedward | 3:d17f07a0d08d | 100 | tempEntry.barTemp = barometerTemperature; |
Jdumpleton3 | 4:edef041d2094 | 101 | tempEntry.barPress = barometerPressure; |
jedward | 3:d17f07a0d08d | 102 | |
Jdumpleton3 | 2:27b92722246b | 103 | isNewData = true; |
Jdumpleton3 | 2:27b92722246b | 104 | } |
Jdumpleton3 | 2:27b92722246b | 105 | } |
Jdumpleton3 | 2:27b92722246b | 106 | /* Prints the data that was read */ |
Jdumpleton3 | 2:27b92722246b | 107 | void printData(){ |
Jdumpleton3 | 4:edef041d2094 | 108 | printf("%s %i: %4.2fC %3.1f%%", tempEntry.dt.c_str(), headNode, tempEntry.airTemp, tempEntry.airPress); |
jedward | 3:d17f07a0d08d | 109 | printf(" %6.1f %4.1f\r\n", tempEntry.barPress, tempEntry.barTemp); |
Jdumpleton3 | 2:27b92722246b | 110 | isNewData = false; |
Jdumpleton3 | 2:27b92722246b | 111 | } |
Jdumpleton3 | 0:b490b8486404 | 112 | |
Jdumpleton3 | 0:b490b8486404 | 113 | |
Jdumpleton3 | 0:b490b8486404 | 114 | |
Jdumpleton3 | 2:27b92722246b | 115 | /* Old Code |
Jdumpleton3 | 2:27b92722246b | 116 | LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR); |
Jdumpleton3 | 2:27b92722246b | 117 | HTS221 humidity(I2C_SDA, I2C_SCL); |
Jdumpleton3 | 0:b490b8486404 | 118 | |
Jdumpleton3 | 2:27b92722246b | 119 | Humidity sensor setup. |
Jdumpleton3 | 2:27b92722246b | 120 | humidity.init(); |
Jdumpleton3 | 2:27b92722246b | 121 | humidity.calib(); |
Jdumpleton3 | 2:27b92722246b | 122 | |
Jdumpleton3 | 2:27b92722246b | 123 | //printf("%#x\n\r",barometer.read_id()); |
Jdumpleton3 | 2:27b92722246b | 124 | |
Jdumpleton3 | 2:27b92722246b | 125 | barometer.get(); |
Jdumpleton3 | 2:27b92722246b | 126 | printf(" %6.1f %4.1f\r\n", barometer.pressure(), barometer.temperature()); |
Jdumpleton3 | 2:27b92722246b | 127 | humidity.ReadTempHumi(&tempCelsius, &humi); |
Jdumpleton3 | 2:27b92722246b | 128 | printf("%4.2fC %3.1f%%", tempCelsius, humi); |
Jdumpleton3 | 2:27b92722246b | 129 | */ |