soft253

Dependencies:   LPS25H hts221

Fork of SOFT253_Template_Weather_OS_54 by Stage-1 Students SoCEM

Committer:
akovaci
Date:
Fri May 12 20:30:29 2017 +0000
Revision:
36:7426f37f0c96
Parent:
35:af125862c33e
soft253

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
martinsimpson 32:260a288be58f 2 #include "rtos.h"
noutram 35:af125862c33e 3 #include "hts221.h"
martinsimpson 32:260a288be58f 4 #include "LPS25H.h"
akovaci 36:7426f37f0c96 5 Serial pc(USBTX, USBRX);
martinsimpson 32:260a288be58f 6
noutram 35:af125862c33e 7
akovaci 36:7426f37f0c96 8 #define N 10
akovaci 36:7426f37f0c96 9 DigitalOut myled(D7);
akovaci 36:7426f37f0c96 10 Ticker t;
martinsimpson 32:260a288be58f 11 I2C i2c2(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 12
noutram 35:af125862c33e 13 float tempCelsius = 25.50;
noutram 35:af125862c33e 14 float humi = 55;
noutram 35:af125862c33e 15 int humiMax = 100;
noutram 35:af125862c33e 16 char cmd=0;
akovaci 36:7426f37f0c96 17 float tempArray[N];
akovaci 36:7426f37f0c96 18 float humArray[N];
akovaci 36:7426f37f0c96 19 float pressArray[N];
noutram 35:af125862c33e 20 uint32_t seconds = 0, minutes=0, hours=0;
akovaci 36:7426f37f0c96 21 static float nextTEMPsample, nextHUMsample, nextPRESSsample;
akovaci 36:7426f37f0c96 22
akovaci 36:7426f37f0c96 23 static int indexOfOldest = (N-1);
martinsimpson 32:260a288be58f 24
noutram 35:af125862c33e 25 LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
noutram 35:af125862c33e 26 HTS221 humidity(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 27
noutram 35:af125862c33e 28
akovaci 36:7426f37f0c96 29 void adcISR();
akovaci 36:7426f37f0c96 30
akovaci 36:7426f37f0c96 31
akovaci 36:7426f37f0c96 32
akovaci 36:7426f37f0c96 33 typedef struct {
akovaci 36:7426f37f0c96 34
akovaci 36:7426f37f0c96 35 float tempVal ;
akovaci 36:7426f37f0c96 36 float humVal;
akovaci 36:7426f37f0c96 37 float pressVal;
akovaci 36:7426f37f0c96 38 }message_t;
martinsimpson 32:260a288be58f 39
akovaci 36:7426f37f0c96 40 Mail<message_t, 10> mail_box;
akovaci 36:7426f37f0c96 41
akovaci 36:7426f37f0c96 42 void adcISR()
akovaci 36:7426f37f0c96 43 {
akovaci 36:7426f37f0c96 44 message_t *message = mail_box.alloc();
akovaci 36:7426f37f0c96 45 message->tempVal = tempCelsius;
akovaci 36:7426f37f0c96 46 message->humVal = humi;
akovaci 36:7426f37f0c96 47 message->pressVal = barometer.pressure();
akovaci 36:7426f37f0c96 48 myled=1;
akovaci 36:7426f37f0c96 49 mail_box.put(message);
akovaci 36:7426f37f0c96 50 //Thread::wait(1000);
akovaci 36:7426f37f0c96 51
akovaci 36:7426f37f0c96 52 }
akovaci 36:7426f37f0c96 53 void thread1 (void const* arg)
akovaci 36:7426f37f0c96 54 {
akovaci 36:7426f37f0c96 55
akovaci 36:7426f37f0c96 56 pc.baud(115200);
akovaci 36:7426f37f0c96 57 pc.printf("Temperature,Humidity,Pressure\n\n");
akovaci 36:7426f37f0c96 58 while(1)
akovaci 36:7426f37f0c96 59 {
akovaci 36:7426f37f0c96 60
akovaci 36:7426f37f0c96 61 osEvent evt = mail_box.get();
akovaci 36:7426f37f0c96 62 if (evt.status == osEventMail)
akovaci 36:7426f37f0c96 63 {
akovaci 36:7426f37f0c96 64 for (unsigned int n=(N-1); n>0; n--)
akovaci 36:7426f37f0c96 65 {
akovaci 36:7426f37f0c96 66 tempArray[n]= tempArray[n-1];
akovaci 36:7426f37f0c96 67 humArray[n]= humArray[n-1];
akovaci 36:7426f37f0c96 68 pressArray[n]= pressArray[n-1];
akovaci 36:7426f37f0c96 69 }
akovaci 36:7426f37f0c96 70 message_t *message = (message_t*)evt.value.p;
akovaci 36:7426f37f0c96 71 tempArray[0]= message->tempVal;
akovaci 36:7426f37f0c96 72 humArray[0] = message->humVal;
akovaci 36:7426f37f0c96 73 pressArray[0]= message->pressVal;
akovaci 36:7426f37f0c96 74 for (unsigned int n=0; n<N; n++)
akovaci 36:7426f37f0c96 75 {
akovaci 36:7426f37f0c96 76 pc.printf("the element of %d is %4.2f\n\r ",n,tempArray[n]);
akovaci 36:7426f37f0c96 77 wait(1.0);
akovaci 36:7426f37f0c96 78 }
akovaci 36:7426f37f0c96 79
akovaci 36:7426f37f0c96 80 // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]);
akovaci 36:7426f37f0c96 81
akovaci 36:7426f37f0c96 82 mail_box.free(message);
akovaci 36:7426f37f0c96 83 }
akovaci 36:7426f37f0c96 84 }
akovaci 36:7426f37f0c96 85 }
akovaci 36:7426f37f0c96 86 char answer;
akovaci 36:7426f37f0c96 87 int main(void)
akovaci 36:7426f37f0c96 88 {
akovaci 36:7426f37f0c96 89
akovaci 36:7426f37f0c96 90 puts("Loading... \n\n");
akovaci 36:7426f37f0c96 91 Thread thread(thread1);
akovaci 36:7426f37f0c96 92 t.attach(&adcISR,15);
akovaci 36:7426f37f0c96 93
akovaci 36:7426f37f0c96 94 while(1)
noutram 35:af125862c33e 95 {
akovaci 36:7426f37f0c96 96
akovaci 36:7426f37f0c96 97
akovaci 36:7426f37f0c96 98
akovaci 36:7426f37f0c96 99 humidity.init();
akovaci 36:7426f37f0c96 100 humidity.calib();
akovaci 36:7426f37f0c96 101 humidity.ReadTempHumi(&tempCelsius, &humi);
akovaci 36:7426f37f0c96 102 barometer.get();
akovaci 36:7426f37f0c96 103 barometer.pressure();
akovaci 36:7426f37f0c96 104 barometer.temperature();
akovaci 36:7426f37f0c96 105 sleep();
akovaci 36:7426f37f0c96 106 Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
akovaci 36:7426f37f0c96 107 myled = 0; // LED is OFF
akovaci 36:7426f37f0c96 108 Thread::wait(100); // 100 ms
akovaci 36:7426f37f0c96 109
akovaci 36:7426f37f0c96 110
akovaci 36:7426f37f0c96 111
akovaci 36:7426f37f0c96 112
FairyMental 34:62aae7d507e2 113 }
akovaci 36:7426f37f0c96 114
noutram 35:af125862c33e 115 }
noutram 35:af125862c33e 116
noutram 35:af125862c33e 117
noutram 35:af125862c33e 118
akovaci 36:7426f37f0c96 119
noutram 35:af125862c33e 120
akovaci 36:7426f37f0c96 121
noutram 35:af125862c33e 122
akovaci 36:7426f37f0c96 123
akovaci 36:7426f37f0c96 124
akovaci 36:7426f37f0c96 125
akovaci 36:7426f37f0c96 126