Minor fixes

Dependencies:   LPS25H hts221

Fork of Coursework by Group PAG

Committer:
pburtenshaw
Date:
Wed May 03 13:30:38 2017 +0000
Revision:
42:4e0a96b52e65
Parent:
36:bbc4b371cb75
Child:
43:4ddc392dd0cc
queue started

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"
RossalaTTM 36:bbc4b371cb75 5 //use for cin
RossalaTTM 36:bbc4b371cb75 6 #include <iostream>
RossalaTTM 36:bbc4b371cb75 7 //Clock class is a class for time and date
RossalaTTM 36:bbc4b371cb75 8 #include "Clock.h"
RossalaTTM 36:bbc4b371cb75 9 //Reading class is for each reading, date and time (Clock), temperature, pressure and humidity
RossalaTTM 36:bbc4b371cb75 10 #include "Reading.h"
RossalaTTM 36:bbc4b371cb75 11 //#include "string.h" //do we need this to use a string? where is it in classes?
noutram 35:af125862c33e 12
martinsimpson 32:260a288be58f 13 DigitalOut myled(LED1);
martinsimpson 32:260a288be58f 14 I2C i2c2(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 15
noutram 35:af125862c33e 16 float tempCelsius = 25.50;
noutram 35:af125862c33e 17 float humi = 55;
noutram 35:af125862c33e 18 int humiMax = 100;
noutram 35:af125862c33e 19 char cmd=0;
noutram 35:af125862c33e 20 uint32_t seconds = 0, minutes=0, hours=0;
RossalaTTM 36:bbc4b371cb75 21 Ticker timer;
RossalaTTM 36:bbc4b371cb75 22 Clock *clockDT = new Clock(); //DT stands for Date Time, this stores the 'current' time of the system. operated by ticker. Note: install ticker
RossalaTTM 36:bbc4b371cb75 23
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
RossalaTTM 36:bbc4b371cb75 29 //void thread1( const void* );
RossalaTTM 36:bbc4b371cb75 30 Thread *t1;
RossalaTTM 36:bbc4b371cb75 31 Thread *t2;
RossalaTTM 36:bbc4b371cb75 32 Thread *t3;
RossalaTTM 36:bbc4b371cb75 33
RossalaTTM 36:bbc4b371cb75 34
RossalaTTM 36:bbc4b371cb75 35 Mail<Reading,16> mail_box;
RossalaTTM 36:bbc4b371cb75 36
RossalaTTM 36:bbc4b371cb75 37 //Queue<Reading,16> queue;
RossalaTTM 36:bbc4b371cb75 38 void pingMeasure(){
RossalaTTM 36:bbc4b371cb75 39 //ping the measure()
RossalaTTM 36:bbc4b371cb75 40 t2->signal_set(8);
RossalaTTM 36:bbc4b371cb75 41 }
RossalaTTM 36:bbc4b371cb75 42 void measure() {
RossalaTTM 36:bbc4b371cb75 43
RossalaTTM 36:bbc4b371cb75 44 //Thread waits for the ping from pingMeasure
RossalaTTM 36:bbc4b371cb75 45 Thread::signal_wait(8);
RossalaTTM 36:bbc4b371cb75 46
RossalaTTM 36:bbc4b371cb75 47 Reading *reading = mail_box.alloc();
RossalaTTM 36:bbc4b371cb75 48 if (reading == NULL) {
RossalaTTM 36:bbc4b371cb75 49 printf("reading=null");
RossalaTTM 36:bbc4b371cb75 50 return;
RossalaTTM 36:bbc4b371cb75 51 }
martinsimpson 32:260a288be58f 52
RossalaTTM 36:bbc4b371cb75 53 reading->clock.setClock(clockDT);
RossalaTTM 36:bbc4b371cb75 54 humidity.ReadTempHumi(&tempCelsius, &humi);
RossalaTTM 36:bbc4b371cb75 55 reading->temp = tempCelsius;
RossalaTTM 36:bbc4b371cb75 56 reading->humidity = humi;
RossalaTTM 36:bbc4b371cb75 57 barometer.get();
RossalaTTM 36:bbc4b371cb75 58 reading->pressure = barometer.pressure();
RossalaTTM 36:bbc4b371cb75 59 //printf("winner winner chicken dinner");
RossalaTTM 36:bbc4b371cb75 60
RossalaTTM 36:bbc4b371cb75 61 osStatus stat = mail_box.put(reading);
RossalaTTM 36:bbc4b371cb75 62
RossalaTTM 36:bbc4b371cb75 63 if (stat == osErrorResource) {
RossalaTTM 36:bbc4b371cb75 64 printf("queue->put() Error code: %4Xh, Resource not available\r\n", stat);
RossalaTTM 36:bbc4b371cb75 65 mail_box.free(reading);
RossalaTTM 36:bbc4b371cb75 66 return;
RossalaTTM 36:bbc4b371cb75 67 }
RossalaTTM 36:bbc4b371cb75 68 }
RossalaTTM 36:bbc4b371cb75 69 void commands(){
RossalaTTM 36:bbc4b371cb75 70 float f1 =0;
RossalaTTM 36:bbc4b371cb75 71 int i1 =0;
RossalaTTM 36:bbc4b371cb75 72 int i2 =0;
RossalaTTM 36:bbc4b371cb75 73 int i3 =0;
RossalaTTM 36:bbc4b371cb75 74 char s1 [10];
RossalaTTM 36:bbc4b371cb75 75 char s2 [10];
RossalaTTM 36:bbc4b371cb75 76 char s3 [10];
RossalaTTM 36:bbc4b371cb75 77 char s4 [10];
RossalaTTM 36:bbc4b371cb75 78 char line [150];
RossalaTTM 36:bbc4b371cb75 79
RossalaTTM 36:bbc4b371cb75 80 while(1) {
RossalaTTM 36:bbc4b371cb75 81 cin.getline( line, 100, '\n' );
RossalaTTM 36:bbc4b371cb75 82 scanf("%s %s %s %s",line);
RossalaTTM 36:bbc4b371cb75 83 //i1 = std::stoi( s2);
RossalaTTM 36:bbc4b371cb75 84 printf("s1 is %s0 s2 is %s s3 is %s \n",s1,s2,s3);
RossalaTTM 36:bbc4b371cb75 85
RossalaTTM 36:bbc4b371cb75 86
RossalaTTM 36:bbc4b371cb75 87 //USE STRNCMP INSTEAD : (strncmp (str[n],"R2xx",2) == 0) WHERE str[n] and "R2xx" are strings to compare and 2 is an int of characters to check
RossalaTTM 36:bbc4b371cb75 88 if(s1=="?"){
noutram 35:af125862c33e 89 printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r");
noutram 35:af125862c33e 90 printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r");
noutram 35:af125862c33e 91 }
RossalaTTM 36:bbc4b371cb75 92 if(s1=="A"){//Gives a reading on command
RossalaTTM 36:bbc4b371cb75 93 printf("A was entered");
RossalaTTM 36:bbc4b371cb75 94
RossalaTTM 36:bbc4b371cb75 95 //humidity.ReadTempHumi(&tempCelsius, &humi);
RossalaTTM 36:bbc4b371cb75 96 //printf("%4.2fC %3.1f%%", tempCelsius, humi);
RossalaTTM 36:bbc4b371cb75 97 //barometer.get();
RossalaTTM 36:bbc4b371cb75 98 //printf(" %6.1f %4.1f\r\n", barometer.pressure(), barometer.temperature());
RossalaTTM 36:bbc4b371cb75 99 //myled = 1; // LED is ON
RossalaTTM 36:bbc4b371cb75 100 //Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
RossalaTTM 36:bbc4b371cb75 101 //myled = 0; // LED is OFF
RossalaTTM 36:bbc4b371cb75 102 //Thread::wait(100); // 100 ms
RossalaTTM 36:bbc4b371cb75 103 }
RossalaTTM 36:bbc4b371cb75 104 //readers
RossalaTTM 36:bbc4b371cb75 105 if(s1 =="READ"){//reads all records Sends a comma separated list of all measurements. Each record shall be separated with a \n newline. Each record shall be comma separated as follows: date, time, temperature, pressure, humidity
RossalaTTM 36:bbc4b371cb75 106 if (s2 == "ALL")
RossalaTTM 36:bbc4b371cb75 107 {
RossalaTTM 36:bbc4b371cb75 108 //READ ALL
RossalaTTM 36:bbc4b371cb75 109 }
RossalaTTM 36:bbc4b371cb75 110 else if (i1>0)
RossalaTTM 36:bbc4b371cb75 111 {
RossalaTTM 36:bbc4b371cb75 112 //READ <n> n is i1
RossalaTTM 36:bbc4b371cb75 113 }
RossalaTTM 36:bbc4b371cb75 114 else
RossalaTTM 36:bbc4b371cb75 115 {
RossalaTTM 36:bbc4b371cb75 116 printf("Are you trying to read something? try READ ALL or READ <n>");
RossalaTTM 36:bbc4b371cb75 117 }
RossalaTTM 36:bbc4b371cb75 118 }
RossalaTTM 36:bbc4b371cb75 119 //deleters
RossalaTTM 36:bbc4b371cb75 120 else if(s1=="DELETE"){//deletes all records The F401 will return a string �DELETED <N> RECORDS� N = no. deleted obviously
RossalaTTM 36:bbc4b371cb75 121 if (s2 =="ALL"){
RossalaTTM 36:bbc4b371cb75 122 //delete all
RossalaTTM 36:bbc4b371cb75 123 }
RossalaTTM 36:bbc4b371cb75 124 else if (i1>0){
RossalaTTM 36:bbc4b371cb75 125 //delete <n> //Delete the oldest <n> records.return �DELETED <m> RECORDS� m is how many were deleted obviously
RossalaTTM 36:bbc4b371cb75 126 }
RossalaTTM 36:bbc4b371cb75 127 else{
RossalaTTM 36:bbc4b371cb75 128 printf("Are you trying to delete something? Try DELETE ALL or DELETE <n>");
RossalaTTM 36:bbc4b371cb75 129 }
RossalaTTM 36:bbc4b371cb75 130 }
RossalaTTM 36:bbc4b371cb75 131
RossalaTTM 36:bbc4b371cb75 132
RossalaTTM 36:bbc4b371cb75 133
RossalaTTM 36:bbc4b371cb75 134 if(s1=="SETDATE"){// no points for guessing what this one does. return a string �DATE UPDATED TO <dd> <dd> <yyyy>�
RossalaTTM 36:bbc4b371cb75 135
noutram 35:af125862c33e 136 }
RossalaTTM 36:bbc4b371cb75 137 if(s1=="SETTIME"){// nil point. return �TIME UPDATED TO <hh> <mm> <ss>�
pburtenshaw 42:4e0a96b52e65 138
RossalaTTM 36:bbc4b371cb75 139 }
RossalaTTM 36:bbc4b371cb75 140 if(s1 == "SETT"){// SETT <t> set sampling rate to 0.1=T=60.0 return a string �T UPDATED TO <T>� otherwise return an �OUT OF RANGE� error.
RossalaTTM 36:bbc4b371cb75 141 //f1 = std::stof( s2 );
noutram 35:af125862c33e 142
RossalaTTM 36:bbc4b371cb75 143 }
RossalaTTM 36:bbc4b371cb75 144 if(s1=="STATE"){//STATE <x> set sampling ON or OFF
RossalaTTM 36:bbc4b371cb75 145 if(s2=="ON"){
RossalaTTM 36:bbc4b371cb75 146 //turn sampling on. somehting like timer.attach
RossalaTTM 36:bbc4b371cb75 147 }
RossalaTTM 36:bbc4b371cb75 148 else if(s2=="OFF"){
RossalaTTM 36:bbc4b371cb75 149 //turn sampling off. somehting like timer.detach
RossalaTTM 36:bbc4b371cb75 150 }
RossalaTTM 36:bbc4b371cb75 151
RossalaTTM 36:bbc4b371cb75 152 }
RossalaTTM 36:bbc4b371cb75 153 if(s1=="LOGGING"){// turns on/off diagnostic logging to the serial interface. The F401 will return a string �LOGGING <x>�
RossalaTTM 36:bbc4b371cb75 154 if(s2=="ON"){
RossalaTTM 36:bbc4b371cb75 155 //turn logging on.
RossalaTTM 36:bbc4b371cb75 156 }
RossalaTTM 36:bbc4b371cb75 157 else if(s2=="OFF"){
RossalaTTM 36:bbc4b371cb75 158 //turn logging off.
RossalaTTM 36:bbc4b371cb75 159 }
noutram 35:af125862c33e 160
RossalaTTM 36:bbc4b371cb75 161
RossalaTTM 36:bbc4b371cb75 162 }
RossalaTTM 36:bbc4b371cb75 163
RossalaTTM 36:bbc4b371cb75 164 }
RossalaTTM 36:bbc4b371cb75 165 }
RossalaTTM 36:bbc4b371cb75 166 void thread1()
RossalaTTM 36:bbc4b371cb75 167 {
RossalaTTM 36:bbc4b371cb75 168 while (true) {
RossalaTTM 36:bbc4b371cb75 169 osEvent evt = mail_box.get();
RossalaTTM 36:bbc4b371cb75 170 //Check status
RossalaTTM 36:bbc4b371cb75 171 if (evt.status == osEventMessage) {
RossalaTTM 36:bbc4b371cb75 172 Reading *pReading = (Reading*)evt.value.p; //This is the pointer (address)
RossalaTTM 36:bbc4b371cb75 173 //Make a copy
RossalaTTM 36:bbc4b371cb75 174 Reading msg(pReading->clock ,pReading->temp, pReading->humidity, pReading->pressure);//CHECKVARIABLE NAMES
RossalaTTM 36:bbc4b371cb75 175 //We are done with this, so give back the memory to the pool
RossalaTTM 36:bbc4b371cb75 176 mail_box.free(pReading);
RossalaTTM 36:bbc4b371cb75 177
RossalaTTM 36:bbc4b371cb75 178
RossalaTTM 36:bbc4b371cb75 179 }//add it to the queue!!!!
RossalaTTM 36:bbc4b371cb75 180 }
RossalaTTM 36:bbc4b371cb75 181 }
noutram 35:af125862c33e 182
noutram 35:af125862c33e 183 // main() runs in its own thread in the OS
noutram 35:af125862c33e 184 int main() {
RossalaTTM 36:bbc4b371cb75 185 //show a sign of life
RossalaTTM 36:bbc4b371cb75 186 //myled = 1;
RossalaTTM 36:bbc4b371cb75 187 humidity.init();
RossalaTTM 36:bbc4b371cb75 188 humidity.calib();
RossalaTTM 36:bbc4b371cb75 189 printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r");
RossalaTTM 36:bbc4b371cb75 190 //printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r");
RossalaTTM 36:bbc4b371cb75 191 //tickevey 15seconds to measure environment
RossalaTTM 36:bbc4b371cb75 192
RossalaTTM 36:bbc4b371cb75 193 timer.detach();
RossalaTTM 36:bbc4b371cb75 194 timer.attach( &pingMeasure, 15);
RossalaTTM 36:bbc4b371cb75 195 printf("well something should be happening right baout now");
RossalaTTM 36:bbc4b371cb75 196 t1 = new Thread();
RossalaTTM 36:bbc4b371cb75 197 t1->start(thread1);
RossalaTTM 36:bbc4b371cb75 198 t2 = new Thread();
RossalaTTM 36:bbc4b371cb75 199 t2->start(measure);
RossalaTTM 36:bbc4b371cb75 200 t3 = new Thread();
RossalaTTM 36:bbc4b371cb75 201 t3->start(commands);
RossalaTTM 36:bbc4b371cb75 202
RossalaTTM 36:bbc4b371cb75 203 printf("Threads Started\n\r");
RossalaTTM 36:bbc4b371cb75 204
RossalaTTM 36:bbc4b371cb75 205 while (true){
RossalaTTM 36:bbc4b371cb75 206 Thread:: wait(5000);
RossalaTTM 36:bbc4b371cb75 207 }
RossalaTTM 36:bbc4b371cb75 208 }