SOFT253 Coursework Weather Reader
Fork of Soft253-WeatherReader by
main.cpp@2:27b92722246b, 2017-04-22 (annotated)
- Committer:
- Jdumpleton3
- Date:
- Sat Apr 22 09:27:18 2017 +0000
- Revision:
- 2:27b92722246b
- Parent:
- 1:8585a8d417dc
- Child:
- 3:d17f07a0d08d
Create interrupt for reading in data, make printing data interrupt safeish
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 | 0:b490b8486404 | 6 | |
Jdumpleton3 | 2:27b92722246b | 7 | //Complex.Variables |
Jdumpleton3 | 0:b490b8486404 | 8 | DigitalOut myled(LED1); |
Jdumpleton3 | 0:b490b8486404 | 9 | I2C i2c2(I2C_SDA, I2C_SCL); |
Jdumpleton3 | 2:27b92722246b | 10 | Ticker dataTimer; |
Jdumpleton3 | 0:b490b8486404 | 11 | |
Jdumpleton3 | 2:27b92722246b | 12 | //Method Headers |
Jdumpleton3 | 2:27b92722246b | 13 | void readData(); |
Jdumpleton3 | 2:27b92722246b | 14 | void createDataThread(); |
Jdumpleton3 | 2:27b92722246b | 15 | void printData(); |
Jdumpleton3 | 2:27b92722246b | 16 | |
Jdumpleton3 | 2:27b92722246b | 17 | //Prim.Variables |
Jdumpleton3 | 0:b490b8486404 | 18 | float tempCelsius = 25.50; |
Jdumpleton3 | 0:b490b8486404 | 19 | float humi = 55; |
Jdumpleton3 | 2:27b92722246b | 20 | float barometerPressure = 0; |
Jdumpleton3 | 2:27b92722246b | 21 | float barometerTemperature = 0; |
Jdumpleton3 | 2:27b92722246b | 22 | float dataReadTime = 2.0; |
Jdumpleton3 | 0:b490b8486404 | 23 | int humiMax = 100; |
Jdumpleton3 | 0:b490b8486404 | 24 | char cmd=0; |
Jdumpleton3 | 0:b490b8486404 | 25 | uint32_t seconds = 0, minutes=0, hours=0; |
Jdumpleton3 | 0:b490b8486404 | 26 | |
Jdumpleton3 | 2:27b92722246b | 27 | //Can't print data in a ticker method (not interrupt safe) |
Jdumpleton3 | 2:27b92722246b | 28 | //This is set once we have got new data, so it can be printed safely later |
Jdumpleton3 | 2:27b92722246b | 29 | bool isNewData=false; |
Jdumpleton3 | 0:b490b8486404 | 30 | |
Jdumpleton3 | 2:27b92722246b | 31 | // Test Data generator setup |
Jdumpleton3 | 1:8585a8d417dc | 32 | DataGenerator dataGen; |
Jdumpleton3 | 0:b490b8486404 | 33 | |
Jdumpleton3 | 1:8585a8d417dc | 34 | int main(){ |
Jdumpleton3 | 1:8585a8d417dc | 35 | printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r"); |
Jdumpleton3 | 1:8585a8d417dc | 36 | printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r"); |
Jdumpleton3 | 1:8585a8d417dc | 37 | |
Jdumpleton3 | 2:27b92722246b | 38 | dataTimer.attach(&readData, dataReadTime); //Attach timer to data reader. |
Jdumpleton3 | 0:b490b8486404 | 39 | |
Jdumpleton3 | 1:8585a8d417dc | 40 | while(1) |
Jdumpleton3 | 0:b490b8486404 | 41 | { |
Jdumpleton3 | 2:27b92722246b | 42 | if (isNewData == true){ |
Jdumpleton3 | 2:27b92722246b | 43 | printData(); |
Jdumpleton3 | 2:27b92722246b | 44 | } |
Jdumpleton3 | 1:8585a8d417dc | 45 | |
Jdumpleton3 | 1:8585a8d417dc | 46 | /* Flicker the LED. */ |
Jdumpleton3 | 0:b490b8486404 | 47 | myled = 1; // LED is ON |
Jdumpleton3 | 0:b490b8486404 | 48 | Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds! |
Jdumpleton3 | 0:b490b8486404 | 49 | myled = 0; // LED is OFF |
Jdumpleton3 | 0:b490b8486404 | 50 | Thread::wait(100); // 100 ms |
Jdumpleton3 | 2:27b92722246b | 51 | } |
Jdumpleton3 | 2:27b92722246b | 52 | } |
Jdumpleton3 | 2:27b92722246b | 53 | |
Jdumpleton3 | 2:27b92722246b | 54 | /* Reads all the data in whenever the ticker interrupt is called */ |
Jdumpleton3 | 2:27b92722246b | 55 | void readData(){ |
Jdumpleton3 | 2:27b92722246b | 56 | //Check if old data has been printed if it hasn't don't do anything |
Jdumpleton3 | 2:27b92722246b | 57 | //As you have interrupted printdata section. |
Jdumpleton3 | 2:27b92722246b | 58 | if (isNewData == false){ |
Jdumpleton3 | 2:27b92722246b | 59 | dataGen.ReadTempHumi(&tempCelsius, &humi); |
Jdumpleton3 | 2:27b92722246b | 60 | |
Jdumpleton3 | 2:27b92722246b | 61 | barometerPressure = dataGen.pressure(); |
Jdumpleton3 | 2:27b92722246b | 62 | barometerTemperature = dataGen.temperature(); |
Jdumpleton3 | 2:27b92722246b | 63 | |
Jdumpleton3 | 2:27b92722246b | 64 | isNewData = true; |
Jdumpleton3 | 2:27b92722246b | 65 | } |
Jdumpleton3 | 2:27b92722246b | 66 | } |
Jdumpleton3 | 2:27b92722246b | 67 | /* Prints the data that was read */ |
Jdumpleton3 | 2:27b92722246b | 68 | void printData(){ |
Jdumpleton3 | 2:27b92722246b | 69 | printf("%4.2fC %3.1f%%", tempCelsius, humi); |
Jdumpleton3 | 2:27b92722246b | 70 | printf(" %6.1f %4.1f\r\n", barometerPressure, barometerTemperature); |
Jdumpleton3 | 2:27b92722246b | 71 | isNewData = false; |
Jdumpleton3 | 2:27b92722246b | 72 | } |
Jdumpleton3 | 0:b490b8486404 | 73 | |
Jdumpleton3 | 0:b490b8486404 | 74 | |
Jdumpleton3 | 0:b490b8486404 | 75 | |
Jdumpleton3 | 2:27b92722246b | 76 | /* Old Code |
Jdumpleton3 | 2:27b92722246b | 77 | LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR); |
Jdumpleton3 | 2:27b92722246b | 78 | HTS221 humidity(I2C_SDA, I2C_SCL); |
Jdumpleton3 | 0:b490b8486404 | 79 | |
Jdumpleton3 | 2:27b92722246b | 80 | Humidity sensor setup. |
Jdumpleton3 | 2:27b92722246b | 81 | humidity.init(); |
Jdumpleton3 | 2:27b92722246b | 82 | humidity.calib(); |
Jdumpleton3 | 2:27b92722246b | 83 | |
Jdumpleton3 | 2:27b92722246b | 84 | //printf("%#x\n\r",barometer.read_id()); |
Jdumpleton3 | 2:27b92722246b | 85 | |
Jdumpleton3 | 2:27b92722246b | 86 | barometer.get(); |
Jdumpleton3 | 2:27b92722246b | 87 | printf(" %6.1f %4.1f\r\n", barometer.pressure(), barometer.temperature()); |
Jdumpleton3 | 2:27b92722246b | 88 | humidity.ReadTempHumi(&tempCelsius, &humi); |
Jdumpleton3 | 2:27b92722246b | 89 | printf("%4.2fC %3.1f%%", tempCelsius, humi); |
Jdumpleton3 | 2:27b92722246b | 90 | */ |