SOFT253 Coursework Weather Reader

Dependencies:   LPS25H hts221

Fork of Soft253-WeatherReader by Joseph Dumpleton

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?

UserRevisionLine numberNew 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 */