update code

Dependencies:   X_NUCLEO_IKS01A1 mbed-rtos mbed

Committer:
acarter2
Date:
Tue May 03 12:27:07 2016 +0000
Revision:
3:f61ae69ed662
Parent:
2:c5fb78148ccc
Child:
4:2c73682f05b5
Child:
7:cb29c20009e8
update to chars;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
acarter2 0:4a8b751dbe7c 1 #include <stdlib.h>
acarter2 1:4cd93767691a 2 //#include <pthread.h>
acarter2 1:4cd93767691a 3 //#include <semaphore.h>
acarter2 0:4a8b751dbe7c 4 #include "buffer.h"
acarter2 0:4a8b751dbe7c 5
acarter2 0:4a8b751dbe7c 6 #include "mbed.h"
acarter2 0:4a8b751dbe7c 7
acarter2 0:4a8b751dbe7c 8 //#include "string.h"
acarter2 0:4a8b751dbe7c 9 #include <stdio.h>
acarter2 0:4a8b751dbe7c 10 #include <ctype.h>
acarter2 0:4a8b751dbe7c 11 #include "x_nucleo_iks01a1.h"
acarter2 0:4a8b751dbe7c 12 #include "rtos.h"
acarter2 0:4a8b751dbe7c 13
acarter2 0:4a8b751dbe7c 14 #define RAND_DIVISOR 100000000
acarter2 0:4a8b751dbe7c 15 #define TRUE 1
acarter2 0:4a8b751dbe7c 16
acarter2 0:4a8b751dbe7c 17 //setting out variables
acarter2 0:4a8b751dbe7c 18
acarter2 0:4a8b751dbe7c 19 /**
acarter2 0:4a8b751dbe7c 20 / this is setting up the connection from the board
acarter2 0:4a8b751dbe7c 21 **/
acarter2 0:4a8b751dbe7c 22
acarter2 0:4a8b751dbe7c 23 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
acarter2 0:4a8b751dbe7c 24 static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
acarter2 0:4a8b751dbe7c 25 static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
acarter2 0:4a8b751dbe7c 26 static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
acarter2 3:f61ae69ed662 27 //static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;
acarter2 0:4a8b751dbe7c 28
acarter2 1:4cd93767691a 29 /*
acarter2 1:4cd93767691a 30 / this is will make sure the contant valid of how much data will be sorted or not as this
acarter2 1:4cd93767691a 31 /could help when the data range.
acarter2 1:4cd93767691a 32 */
acarter2 1:4cd93767691a 33 const int amountOfSample = 150;
acarter2 1:4cd93767691a 34
acarter2 1:4cd93767691a 35
acarter2 1:4cd93767691a 36 const int BUFFER_SIZE = 75;
acarter2 0:4a8b751dbe7c 37
acarter2 0:4a8b751dbe7c 38 // mutex lock
acarter2 1:4cd93767691a 39 Mutex *bufferLock;
acarter2 0:4a8b751dbe7c 40
acarter2 1:4cd93767691a 41
acarter2 0:4a8b751dbe7c 42
acarter2 0:4a8b751dbe7c 43 //buffer
acarter2 3:f61ae69ed662 44 char buffer_item[BUFFER_SIZE];
acarter2 0:4a8b751dbe7c 45
acarter2 0:4a8b751dbe7c 46
acarter2 1:4cd93767691a 47 Thread tid; //thread id
acarter2 0:4a8b751dbe7c 48 pthread_attr_t attr; //set of thread attributes
acarter2 0:4a8b751dbe7c 49
acarter2 0:4a8b751dbe7c 50 void *producer(void *param); //producer thread
acarter2 0:4a8b751dbe7c 51 void *consumer(void *param); //consumer thread
acarter2 0:4a8b751dbe7c 52
acarter2 1:4cd93767691a 53
acarter2 1:4cd93767691a 54
acarter2 3:f61ae69ed662 55 volatile char memorySample[amountOfSample];
acarter2 0:4a8b751dbe7c 56
acarter2 0:4a8b751dbe7c 57 char values[20][20];
acarter2 0:4a8b751dbe7c 58
acarter2 1:4cd93767691a 59
acarter2 0:4a8b751dbe7c 60
acarter2 0:4a8b751dbe7c 61
acarter2 0:4a8b751dbe7c 62 uint8_t id;
acarter2 0:4a8b751dbe7c 63
acarter2 0:4a8b751dbe7c 64
acarter2 0:4a8b751dbe7c 65 //class
acarter2 0:4a8b751dbe7c 66
acarter2 0:4a8b751dbe7c 67 class KeyLocks {
acarter2 0:4a8b751dbe7c 68
acarter2 0:4a8b751dbe7c 69 public:
acarter2 0:4a8b751dbe7c 70 int key;
acarter2 0:4a8b751dbe7c 71
acarter2 0:4a8b751dbe7c 72 KeyLocks(){
acarter2 0:4a8b751dbe7c 73
acarter2 0:4a8b751dbe7c 74 key = 0;
acarter2 0:4a8b751dbe7c 75
acarter2 0:4a8b751dbe7c 76 }
acarter2 0:4a8b751dbe7c 77
acarter2 0:4a8b751dbe7c 78 bool unlock(void)
acarter2 0:4a8b751dbe7c 79 {
acarter2 0:4a8b751dbe7c 80 if(key == 0){
acarter2 0:4a8b751dbe7c 81
acarter2 0:4a8b751dbe7c 82 key = 1;
acarter2 0:4a8b751dbe7c 83 return true;
acarter2 0:4a8b751dbe7c 84
acarter2 0:4a8b751dbe7c 85 }else{
acarter2 0:4a8b751dbe7c 86 return false;
acarter2 0:4a8b751dbe7c 87
acarter2 0:4a8b751dbe7c 88 }
acarter2 0:4a8b751dbe7c 89 }
acarter2 0:4a8b751dbe7c 90
acarter2 0:4a8b751dbe7c 91 bool lock(void)
acarter2 0:4a8b751dbe7c 92 {
acarter2 0:4a8b751dbe7c 93 if(key == 1){
acarter2 0:4a8b751dbe7c 94
acarter2 0:4a8b751dbe7c 95 key = 0;
acarter2 0:4a8b751dbe7c 96 return true;
acarter2 0:4a8b751dbe7c 97
acarter2 0:4a8b751dbe7c 98 }else{
acarter2 0:4a8b751dbe7c 99 return false;
acarter2 0:4a8b751dbe7c 100
acarter2 0:4a8b751dbe7c 101 }
acarter2 0:4a8b751dbe7c 102 }
acarter2 0:4a8b751dbe7c 103
acarter2 0:4a8b751dbe7c 104 };
acarter2 0:4a8b751dbe7c 105
acarter2 0:4a8b751dbe7c 106 class SampleRate : public KeyLocks
acarter2 0:4a8b751dbe7c 107 {
acarter2 0:4a8b751dbe7c 108 public:
acarter2 0:4a8b751dbe7c 109 /*
acarter2 0:4a8b751dbe7c 110 /this is going the amount of time which the data sample will be taking and this will have
acarter2 0:4a8b751dbe7c 111 /a default stating of every 15 second but can be changed
acarter2 0:4a8b751dbe7c 112 */
acarter2 0:4a8b751dbe7c 113 int sampleRate;
acarter2 0:4a8b751dbe7c 114
acarter2 0:4a8b751dbe7c 115 SampleRate(){
acarter2 0:4a8b751dbe7c 116
acarter2 0:4a8b751dbe7c 117 sampleRate = 15;
acarter2 0:4a8b751dbe7c 118
acarter2 0:4a8b751dbe7c 119 }
acarter2 0:4a8b751dbe7c 120
acarter2 0:4a8b751dbe7c 121 int getSampleRate(void)
acarter2 0:4a8b751dbe7c 122 {
acarter2 0:4a8b751dbe7c 123 return sampleRate;
acarter2 0:4a8b751dbe7c 124 }
acarter2 0:4a8b751dbe7c 125 void setSampleRate(double newSampleRate){
acarter2 0:4a8b751dbe7c 126
acarter2 0:4a8b751dbe7c 127 sampleRate = newSampleRate;
acarter2 0:4a8b751dbe7c 128
acarter2 0:4a8b751dbe7c 129 }
acarter2 0:4a8b751dbe7c 130
acarter2 0:4a8b751dbe7c 131
acarter2 0:4a8b751dbe7c 132
acarter2 0:4a8b751dbe7c 133 };
acarter2 0:4a8b751dbe7c 134
acarter2 0:4a8b751dbe7c 135
acarter2 0:4a8b751dbe7c 136 class TakeSample : public KeyLocks
acarter2 0:4a8b751dbe7c 137 {
acarter2 0:4a8b751dbe7c 138 public:
acarter2 0:4a8b751dbe7c 139 /*
acarter2 0:4a8b751dbe7c 140 /this is going to take the sample or not as this can change if the person thing it could happen
acarter2 0:4a8b751dbe7c 141 /which will see if the data is stored
acarter2 0:4a8b751dbe7c 142 */
acarter2 0:4a8b751dbe7c 143 bool takeSample;
acarter2 0:4a8b751dbe7c 144
acarter2 0:4a8b751dbe7c 145 TakeSample(){
acarter2 0:4a8b751dbe7c 146 takeSample = true;
acarter2 0:4a8b751dbe7c 147 }
acarter2 0:4a8b751dbe7c 148
acarter2 0:4a8b751dbe7c 149 int getTakeSample(void)
acarter2 0:4a8b751dbe7c 150 {
acarter2 0:4a8b751dbe7c 151 return takeSample;
acarter2 0:4a8b751dbe7c 152 }
acarter2 0:4a8b751dbe7c 153 void setTakeSample(bool newTakeSample){
acarter2 0:4a8b751dbe7c 154
acarter2 0:4a8b751dbe7c 155 takeSample = newTakeSample;
acarter2 0:4a8b751dbe7c 156
acarter2 0:4a8b751dbe7c 157 }
acarter2 0:4a8b751dbe7c 158 };
acarter2 0:4a8b751dbe7c 159
acarter2 0:4a8b751dbe7c 160
acarter2 0:4a8b751dbe7c 161
acarter2 0:4a8b751dbe7c 162 class SampleTemp: public KeyLocks
acarter2 0:4a8b751dbe7c 163 {
acarter2 0:4a8b751dbe7c 164 public:
acarter2 0:4a8b751dbe7c 165
acarter2 0:4a8b751dbe7c 166 SampleTemp(){}
acarter2 0:4a8b751dbe7c 167 float currentTemp;
acarter2 0:4a8b751dbe7c 168 /*
acarter2 0:4a8b751dbe7c 169 /this is the fuction which will get the humidity for the external devices
acarter2 0:4a8b751dbe7c 170 */
acarter2 0:4a8b751dbe7c 171 float getTemp(void)
acarter2 0:4a8b751dbe7c 172 {
acarter2 0:4a8b751dbe7c 173 temp_sensor1->GetTemperature(&currentTemp);
acarter2 0:4a8b751dbe7c 174 return currentTemp;
acarter2 0:4a8b751dbe7c 175 }
acarter2 0:4a8b751dbe7c 176 };
acarter2 0:4a8b751dbe7c 177
acarter2 0:4a8b751dbe7c 178 class SampleHumitaty: public KeyLocks
acarter2 0:4a8b751dbe7c 179 {
acarter2 0:4a8b751dbe7c 180 public:
acarter2 0:4a8b751dbe7c 181
acarter2 0:4a8b751dbe7c 182 SampleHumitaty(){}
acarter2 0:4a8b751dbe7c 183
acarter2 0:4a8b751dbe7c 184 float currentHumitaty;
acarter2 0:4a8b751dbe7c 185 /*
acarter2 0:4a8b751dbe7c 186 /this is the fuction which will get the humidity for the external devices
acarter2 0:4a8b751dbe7c 187 */
acarter2 0:4a8b751dbe7c 188 float getHumidity()
acarter2 0:4a8b751dbe7c 189 {
acarter2 0:4a8b751dbe7c 190 humidity_sensor->GetHumidity(&currentHumitaty);
acarter2 0:4a8b751dbe7c 191 return currentHumitaty;
acarter2 0:4a8b751dbe7c 192
acarter2 0:4a8b751dbe7c 193 }
acarter2 0:4a8b751dbe7c 194 };
acarter2 0:4a8b751dbe7c 195
acarter2 0:4a8b751dbe7c 196
acarter2 0:4a8b751dbe7c 197 class SamplePressure: public KeyLocks
acarter2 0:4a8b751dbe7c 198
acarter2 0:4a8b751dbe7c 199 {
acarter2 0:4a8b751dbe7c 200 public:
acarter2 0:4a8b751dbe7c 201
acarter2 0:4a8b751dbe7c 202 SamplePressure(){}
acarter2 0:4a8b751dbe7c 203
acarter2 0:4a8b751dbe7c 204 float currentPressure;
acarter2 0:4a8b751dbe7c 205 /*
acarter2 0:4a8b751dbe7c 206 /this is the fuction which will get the pressure for the external devices
acarter2 0:4a8b751dbe7c 207 */
acarter2 0:4a8b751dbe7c 208 float getPressure()
acarter2 0:4a8b751dbe7c 209 {
acarter2 0:4a8b751dbe7c 210 pressure_sensor->GetPressure(&currentPressure);
acarter2 0:4a8b751dbe7c 211 return currentPressure;
acarter2 0:4a8b751dbe7c 212 }
acarter2 0:4a8b751dbe7c 213 };
acarter2 0:4a8b751dbe7c 214
acarter2 0:4a8b751dbe7c 215 class SampleDisplay: public KeyLocks
acarter2 0:4a8b751dbe7c 216 {
acarter2 0:4a8b751dbe7c 217 public:
acarter2 0:4a8b751dbe7c 218 /*
acarter2 0:4a8b751dbe7c 219 /this is the variable to see if the data will be display or not after the data being sorted
acarter2 0:4a8b751dbe7c 220 /this can change by the user input
acarter2 0:4a8b751dbe7c 221 */
acarter2 0:4a8b751dbe7c 222
acarter2 0:4a8b751dbe7c 223 bool display;
acarter2 0:4a8b751dbe7c 224
acarter2 0:4a8b751dbe7c 225 SampleDisplay(){
acarter2 0:4a8b751dbe7c 226 display = false;
acarter2 0:4a8b751dbe7c 227 }
acarter2 0:4a8b751dbe7c 228
acarter2 0:4a8b751dbe7c 229 bool getTakeDisplay(void)
acarter2 0:4a8b751dbe7c 230 {
acarter2 0:4a8b751dbe7c 231 return display;
acarter2 0:4a8b751dbe7c 232 }
acarter2 0:4a8b751dbe7c 233 void setDisplay(bool newSampleDisplay){
acarter2 0:4a8b751dbe7c 234
acarter2 0:4a8b751dbe7c 235 display = newSampleDisplay;
acarter2 0:4a8b751dbe7c 236
acarter2 0:4a8b751dbe7c 237 }
acarter2 0:4a8b751dbe7c 238 };
acarter2 0:4a8b751dbe7c 239
acarter2 0:4a8b751dbe7c 240
acarter2 0:4a8b751dbe7c 241
acarter2 0:4a8b751dbe7c 242
acarter2 0:4a8b751dbe7c 243 class BufferStartPointer: public KeyLocks
acarter2 0:4a8b751dbe7c 244 {
acarter2 0:4a8b751dbe7c 245 public:
acarter2 0:4a8b751dbe7c 246 /*
acarter2 0:4a8b751dbe7c 247 /this is the pointer to start of the buffer as this will make the buffer be cycler
acarter2 0:4a8b751dbe7c 248 */
acarter2 0:4a8b751dbe7c 249 int bufferStartPointer;
acarter2 0:4a8b751dbe7c 250
acarter2 0:4a8b751dbe7c 251 BufferStartPointer(){
acarter2 0:4a8b751dbe7c 252 bufferStartPointer = 0;
acarter2 0:4a8b751dbe7c 253 }
acarter2 0:4a8b751dbe7c 254
acarter2 0:4a8b751dbe7c 255 int getBufferStartPointer (void)
acarter2 0:4a8b751dbe7c 256 {
acarter2 3:f61ae69ed662 257 key = 1;
acarter2 0:4a8b751dbe7c 258 return bufferStartPointer;
acarter2 3:f61ae69ed662 259
acarter2 0:4a8b751dbe7c 260 }
acarter2 0:4a8b751dbe7c 261 void setBufferStartPointer (int newBufferStartPointer ){
acarter2 0:4a8b751dbe7c 262
acarter2 0:4a8b751dbe7c 263 bufferStartPointer = newBufferStartPointer;
acarter2 0:4a8b751dbe7c 264
acarter2 1:4cd93767691a 265 }
acarter2 1:4cd93767691a 266 void plusOne(void){
acarter2 1:4cd93767691a 267 if(bufferStartPointer + 1 == BUFFER_SIZE){
acarter2 1:4cd93767691a 268 bufferStartPointer = 0;
acarter2 1:4cd93767691a 269 }else{
acarter2 1:4cd93767691a 270 bufferStartPointer = bufferStartPointer + 1;
acarter2 1:4cd93767691a 271 }
acarter2 1:4cd93767691a 272 }
acarter2 0:4a8b751dbe7c 273 };
acarter2 0:4a8b751dbe7c 274
acarter2 0:4a8b751dbe7c 275
acarter2 0:4a8b751dbe7c 276 class BufferEndPointer: public KeyLocks
acarter2 0:4a8b751dbe7c 277 {
acarter2 0:4a8b751dbe7c 278 public:
acarter2 0:4a8b751dbe7c 279 /*
acarter2 0:4a8b751dbe7c 280 /this is the pointer to End of the buffer as this will make the buffer be cycler
acarter2 0:4a8b751dbe7c 281 */
acarter2 0:4a8b751dbe7c 282 int bufferEndPointer;
acarter2 0:4a8b751dbe7c 283
acarter2 1:4cd93767691a 284
acarter2 0:4a8b751dbe7c 285 BufferEndPointer(){
acarter2 0:4a8b751dbe7c 286 bufferEndPointer = 0;
acarter2 0:4a8b751dbe7c 287 }
acarter2 0:4a8b751dbe7c 288
acarter2 0:4a8b751dbe7c 289 int getBufferEndPointer (void)
acarter2 0:4a8b751dbe7c 290 {
acarter2 0:4a8b751dbe7c 291 return bufferEndPointer;
acarter2 0:4a8b751dbe7c 292 }
acarter2 0:4a8b751dbe7c 293 void setBufferEndPointer (int newBufferEndPointer ){
acarter2 0:4a8b751dbe7c 294
acarter2 0:4a8b751dbe7c 295 bufferEndPointer = newBufferEndPointer;
acarter2 0:4a8b751dbe7c 296
acarter2 1:4cd93767691a 297 }
acarter2 1:4cd93767691a 298
acarter2 1:4cd93767691a 299 void plusOne(void){
acarter2 1:4cd93767691a 300 if(bufferEndPointer + 1 == BUFFER_SIZE){
acarter2 1:4cd93767691a 301 bufferEndPointer = 0;
acarter2 1:4cd93767691a 302 }else{
acarter2 1:4cd93767691a 303 bufferEndPointer = bufferEndPointer + 1;
acarter2 1:4cd93767691a 304 }
acarter2 1:4cd93767691a 305 }
acarter2 1:4cd93767691a 306 };
acarter2 1:4cd93767691a 307
acarter2 1:4cd93767691a 308 class BufferSize: public KeyLocks
acarter2 1:4cd93767691a 309 {
acarter2 1:4cd93767691a 310
acarter2 1:4cd93767691a 311 public:
acarter2 1:4cd93767691a 312 int bufferSize;
acarter2 1:4cd93767691a 313 Semaphore *EmptyBuffer;
acarter2 1:4cd93767691a 314 Semaphore *fullBuffer;
acarter2 1:4cd93767691a 315
acarter2 1:4cd93767691a 316 BufferSize(){
acarter2 1:4cd93767691a 317 EmptyBuffer = new Semaphore(0);
acarter2 3:f61ae69ed662 318 fullBuffer = new Semaphore(BUFFER_SIZE);
acarter2 1:4cd93767691a 319 bufferSize = 0;
acarter2 1:4cd93767691a 320
acarter2 1:4cd93767691a 321 }
acarter2 1:4cd93767691a 322
acarter2 1:4cd93767691a 323 void increaseBufferSize(){
acarter2 1:4cd93767691a 324 bufferSize = bufferSize + 1;
acarter2 1:4cd93767691a 325 }
acarter2 1:4cd93767691a 326
acarter2 1:4cd93767691a 327 void deincreaseBufferSize(){
acarter2 1:4cd93767691a 328 bufferSize = bufferSize - 1;
acarter2 1:4cd93767691a 329 }
acarter2 1:4cd93767691a 330
acarter2 1:4cd93767691a 331 int getBufferSize(){
acarter2 1:4cd93767691a 332 return bufferSize;
acarter2 1:4cd93767691a 333 }
acarter2 1:4cd93767691a 334
acarter2 1:4cd93767691a 335 int getEmptyBuffer(){
acarter2 1:4cd93767691a 336 return EmptyBuffer -> wait();
acarter2 1:4cd93767691a 337 }
acarter2 1:4cd93767691a 338
acarter2 1:4cd93767691a 339 int getFullBuffer(){
acarter2 1:4cd93767691a 340 return fullBuffer -> wait();
acarter2 1:4cd93767691a 341 }
acarter2 1:4cd93767691a 342
acarter2 1:4cd93767691a 343 void releaseEmptyBuffer(){
acarter2 3:f61ae69ed662 344 EmptyBuffer -> release();
acarter2 1:4cd93767691a 345 }
acarter2 1:4cd93767691a 346
acarter2 1:4cd93767691a 347 void releaseFullBuffer(){
acarter2 3:f61ae69ed662 348 fullBuffer -> release();
acarter2 1:4cd93767691a 349 }
acarter2 1:4cd93767691a 350
acarter2 1:4cd93767691a 351
acarter2 0:4a8b751dbe7c 352 };
acarter2 0:4a8b751dbe7c 353
acarter2 2:c5fb78148ccc 354 /**void initialiseBufferData(){
acarter2 0:4a8b751dbe7c 355 //create mutex lock
acarter2 0:4a8b751dbe7c 356 pthread_mutex_init(&mutex, NULL);
acarter2 0:4a8b751dbe7c 357
acarter2 0:4a8b751dbe7c 358 //create full semaphore and initialise to 0
acarter2 0:4a8b751dbe7c 359 sem_init(&full, 0, 0);
acarter2 0:4a8b751dbe7c 360
acarter2 0:4a8b751dbe7c 361 //create empty semaphore and initialise to BUFFER_SIZE
acarter2 0:4a8b751dbe7c 362 sem_init(&empty, 0, BUFFER_SIZE);
acarter2 0:4a8b751dbe7c 363
acarter2 0:4a8b751dbe7c 364 //get default attributes
acarter2 0:4a8b751dbe7c 365 pthread_attr_init(&attr);
acarter2 0:4a8b751dbe7c 366
acarter2 0:4a8b751dbe7c 367 //init buffer
acarter2 0:4a8b751dbe7c 368 counter = 0;
acarter2 2:c5fb78148ccc 369 }**/
acarter2 0:4a8b751dbe7c 370
acarter2 0:4a8b751dbe7c 371 //producer thread
acarter2 3:f61ae69ed662 372 void *producer(char newItem, BufferEndPointer *endPointer, BufferSize *bufferSize){
acarter2 1:4cd93767691a 373
acarter2 1:4cd93767691a 374 while(!bufferSize->lock()){};
acarter2 0:4a8b751dbe7c 375
acarter2 1:4cd93767691a 376 int size = bufferSize -> getBufferSize();
acarter2 1:4cd93767691a 377
acarter2 1:4cd93767691a 378 while(size < BUFFER_SIZE){
acarter2 0:4a8b751dbe7c 379 //sleep for random amount of time
acarter2 0:4a8b751dbe7c 380
acarter2 1:4cd93767691a 381 //get the buffer
acarter2 1:4cd93767691a 382 bufferLock->lock();
acarter2 1:4cd93767691a 383
acarter2 1:4cd93767691a 384
acarter2 1:4cd93767691a 385 while(!endPointer->lock()){};
acarter2 0:4a8b751dbe7c 386
acarter2 1:4cd93767691a 387 endPointer->plusOne();
acarter2 3:f61ae69ed662 388 const int bufferIndex = endPointer->getBufferEndPointer();
acarter2 3:f61ae69ed662 389 buffer_item[bufferIndex] = newItem;
acarter2 1:4cd93767691a 390 endPointer->unlock();
acarter2 1:4cd93767691a 391 bufferLock->unlock();
acarter2 1:4cd93767691a 392 while(!bufferSize->lock()){};
acarter2 1:4cd93767691a 393 bufferSize ->increaseBufferSize();
acarter2 1:4cd93767691a 394 size = bufferSize -> getBufferSize();
acarter2 1:4cd93767691a 395
acarter2 1:4cd93767691a 396
acarter2 0:4a8b751dbe7c 397 }
acarter2 0:4a8b751dbe7c 398 }
acarter2 0:4a8b751dbe7c 399
acarter2 0:4a8b751dbe7c 400 //consumer thread
acarter2 2:c5fb78148ccc 401 void *consumer(BufferStartPointer *startPointer, BufferSize *bufferSize, BufferEndPointer *endPointer) {
acarter2 2:c5fb78148ccc 402
acarter2 2:c5fb78148ccc 403 while(!bufferSize->lock()){};
acarter2 2:c5fb78148ccc 404
acarter2 2:c5fb78148ccc 405 int size = bufferSize -> getBufferSize();
acarter2 2:c5fb78148ccc 406
acarter2 2:c5fb78148ccc 407 while(size > 0){
acarter2 2:c5fb78148ccc 408 //sleep for random amount of time
acarter2 2:c5fb78148ccc 409
acarter2 2:c5fb78148ccc 410 //get the buffer
acarter2 2:c5fb78148ccc 411 bufferLock->lock();
acarter2 2:c5fb78148ccc 412
acarter2 2:c5fb78148ccc 413 while(!endPointer->lock()){};
acarter2 2:c5fb78148ccc 414
acarter2 3:f61ae69ed662 415 int ramIndex = endPointer->getBufferEndPointer();
acarter2 2:c5fb78148ccc 416
acarter2 3:f61ae69ed662 417 endPointer -> unlock();
acarter2 2:c5fb78148ccc 418
acarter2 2:c5fb78148ccc 419 while(!startPointer->lock()){};
acarter2 2:c5fb78148ccc 420
acarter2 2:c5fb78148ccc 421 startPointer->plusOne();
acarter2 3:f61ae69ed662 422
acarter2 3:f61ae69ed662 423
acarter2 3:f61ae69ed662 424 memorySample[ramIndex] = buffer_item[startPointer->getBufferStartPointer()];
acarter2 3:f61ae69ed662 425
acarter2 3:f61ae69ed662 426
acarter2 3:f61ae69ed662 427
acarter2 2:c5fb78148ccc 428 startPointer->unlock();
acarter2 2:c5fb78148ccc 429 bufferLock->unlock();
acarter2 2:c5fb78148ccc 430
acarter2 2:c5fb78148ccc 431
acarter2 2:c5fb78148ccc 432 while(!bufferSize->lock()){};
acarter2 2:c5fb78148ccc 433 bufferSize ->deincreaseBufferSize();
acarter2 2:c5fb78148ccc 434 size = bufferSize -> getBufferSize();
acarter2 2:c5fb78148ccc 435
acarter2 2:c5fb78148ccc 436
acarter2 2:c5fb78148ccc 437 }
acarter2 0:4a8b751dbe7c 438
acarter2 1:4cd93767691a 439
acarter2 0:4a8b751dbe7c 440 }
acarter2 0:4a8b751dbe7c 441
acarter2 0:4a8b751dbe7c 442 //this is setting all the function for the treads in the program
acarter2 0:4a8b751dbe7c 443
acarter2 0:4a8b751dbe7c 444
acarter2 0:4a8b751dbe7c 445 /*
acarter2 0:4a8b751dbe7c 446 /this is fucntion which the important the updateSample rate
acarter2 0:4a8b751dbe7c 447 */
acarter2 0:4a8b751dbe7c 448 void updateSample(SamplePressure* pressure, SampleHumitaty* humitaty, SampleTemp* tempeture)
acarter2 0:4a8b751dbe7c 449 {
acarter2 0:4a8b751dbe7c 450 while(!pressure->lock()){};
acarter2 0:4a8b751dbe7c 451
acarter2 0:4a8b751dbe7c 452 float currentPressure = pressure->getPressure();
acarter2 0:4a8b751dbe7c 453 pressure->unlock();
acarter2 0:4a8b751dbe7c 454
acarter2 0:4a8b751dbe7c 455 while(!humitaty->lock()){};
acarter2 0:4a8b751dbe7c 456
acarter2 0:4a8b751dbe7c 457 float current= humitaty->getHumidity();
acarter2 0:4a8b751dbe7c 458 humitaty->unlock();
acarter2 0:4a8b751dbe7c 459
acarter2 0:4a8b751dbe7c 460
acarter2 0:4a8b751dbe7c 461 while(!tempeture->lock()){};
acarter2 0:4a8b751dbe7c 462
acarter2 0:4a8b751dbe7c 463 float currentTemp= tempeture->getTemp();
acarter2 0:4a8b751dbe7c 464 tempeture->unlock();
acarter2 0:4a8b751dbe7c 465
acarter2 0:4a8b751dbe7c 466 }
acarter2 0:4a8b751dbe7c 467
acarter2 0:4a8b751dbe7c 468
acarter2 0:4a8b751dbe7c 469 void splitString(char inputString[]){
acarter2 0:4a8b751dbe7c 470 int sizeOfArray = 1000;
acarter2 0:4a8b751dbe7c 471 char opertaion[sizeOfArray];
acarter2 0:4a8b751dbe7c 472 char data[sizeOfArray];
acarter2 0:4a8b751dbe7c 473
acarter2 0:4a8b751dbe7c 474 for (int i = 0; i < 20; i++){
acarter2 0:4a8b751dbe7c 475 for (int j = 0; i < 20; j++){
acarter2 0:4a8b751dbe7c 476 values[i][j] =' ';
acarter2 0:4a8b751dbe7c 477
acarter2 0:4a8b751dbe7c 478 }
acarter2 0:4a8b751dbe7c 479 }
acarter2 0:4a8b751dbe7c 480
acarter2 0:4a8b751dbe7c 481 for (int i = 0; i < sizeOfArray; i++){
acarter2 0:4a8b751dbe7c 482
acarter2 0:4a8b751dbe7c 483 if(inputString[i] == '<'){
acarter2 0:4a8b751dbe7c 484 for(int j=0; j < i; j++){
acarter2 0:4a8b751dbe7c 485
acarter2 0:4a8b751dbe7c 486 opertaion[j] = inputString[j];
acarter2 0:4a8b751dbe7c 487
acarter2 0:4a8b751dbe7c 488 }
acarter2 0:4a8b751dbe7c 489
acarter2 0:4a8b751dbe7c 490 int index = 0;
acarter2 0:4a8b751dbe7c 491
acarter2 0:4a8b751dbe7c 492 for(int k=i+1; k < sizeOfArray - 1; k++){
acarter2 0:4a8b751dbe7c 493
acarter2 0:4a8b751dbe7c 494 data[index] = (inputString[k]);
acarter2 0:4a8b751dbe7c 495 index++;
acarter2 0:4a8b751dbe7c 496
acarter2 0:4a8b751dbe7c 497 }
acarter2 0:4a8b751dbe7c 498
acarter2 0:4a8b751dbe7c 499
acarter2 0:4a8b751dbe7c 500
acarter2 0:4a8b751dbe7c 501 for(int y = 0; y < 20; y++){
acarter2 0:4a8b751dbe7c 502 values[0][y] = opertaion[y];
acarter2 0:4a8b751dbe7c 503 }
acarter2 0:4a8b751dbe7c 504
acarter2 0:4a8b751dbe7c 505 for(int z = 0;z < 20; z++){
acarter2 0:4a8b751dbe7c 506 values[1][z] = data[z];
acarter2 0:4a8b751dbe7c 507 }
acarter2 0:4a8b751dbe7c 508
acarter2 0:4a8b751dbe7c 509 break;
acarter2 0:4a8b751dbe7c 510
acarter2 0:4a8b751dbe7c 511 }
acarter2 0:4a8b751dbe7c 512 }
acarter2 0:4a8b751dbe7c 513 }
acarter2 0:4a8b751dbe7c 514
acarter2 3:f61ae69ed662 515 static char *printDouble(char* str, double v, int decimalDigits=2)
acarter2 3:f61ae69ed662 516 {
acarter2 3:f61ae69ed662 517 int i = 1;
acarter2 3:f61ae69ed662 518 int intPart, fractPart;
acarter2 3:f61ae69ed662 519 int len;
acarter2 3:f61ae69ed662 520 char *ptr;
acarter2 3:f61ae69ed662 521
acarter2 3:f61ae69ed662 522 /* prepare decimal digits multiplicator */
acarter2 3:f61ae69ed662 523 for (;decimalDigits!=0; i*=10, decimalDigits--);
acarter2 3:f61ae69ed662 524
acarter2 3:f61ae69ed662 525 /* calculate integer & fractinal parts */
acarter2 3:f61ae69ed662 526 intPart = (int)v;
acarter2 3:f61ae69ed662 527 fractPart = (int)((v-(double)(int)v)*i);
acarter2 3:f61ae69ed662 528
acarter2 3:f61ae69ed662 529 /* fill in integer part */
acarter2 3:f61ae69ed662 530 sprintf(str, "%i.", intPart);
acarter2 3:f61ae69ed662 531
acarter2 3:f61ae69ed662 532 /* prepare fill in of fractional part */
acarter2 3:f61ae69ed662 533 len = strlen(str);
acarter2 3:f61ae69ed662 534 ptr = &str[len];
acarter2 3:f61ae69ed662 535
acarter2 3:f61ae69ed662 536 /* fill in leading fractional zeros */
acarter2 3:f61ae69ed662 537 for (i/=10;i>1; i/=10, ptr++) {
acarter2 3:f61ae69ed662 538 if(fractPart >= i) break;
acarter2 3:f61ae69ed662 539 *ptr = '0';
acarter2 3:f61ae69ed662 540 }
acarter2 3:f61ae69ed662 541
acarter2 3:f61ae69ed662 542 /* fill in (rest of) fractional part */
acarter2 3:f61ae69ed662 543 sprintf(ptr, "%i", fractPart);
acarter2 3:f61ae69ed662 544
acarter2 3:f61ae69ed662 545 return str;
acarter2 3:f61ae69ed662 546 }
acarter2 3:f61ae69ed662 547
acarter2 0:4a8b751dbe7c 548 /*
acarter2 0:4a8b751dbe7c 549 /this is going to sort the string to see the opertion which will picked the opertion which
acarter2 0:4a8b751dbe7c 550 /need the be carried out and the put the data in to the tread to then which the tread will
acarter2 0:4a8b751dbe7c 551 /do it operation
acarter2 0:4a8b751dbe7c 552 */
acarter2 0:4a8b751dbe7c 553 void sortString(char inputString[])
acarter2 0:4a8b751dbe7c 554 {
acarter2 0:4a8b751dbe7c 555
acarter2 0:4a8b751dbe7c 556 //if("DELETE" == values[0]){
acarter2 0:4a8b751dbe7c 557
acarter2 0:4a8b751dbe7c 558 //printCurrentRecord(values[]);
acarter2 0:4a8b751dbe7c 559
acarter2 0:4a8b751dbe7c 560 //}
acarter2 0:4a8b751dbe7c 561
acarter2 0:4a8b751dbe7c 562 //https://developer.mbed.org/teams/Students-Plymouth-University-UK-SoCEM/
acarter2 0:4a8b751dbe7c 563
acarter2 0:4a8b751dbe7c 564 }
acarter2 0:4a8b751dbe7c 565
acarter2 0:4a8b751dbe7c 566
acarter2 0:4a8b751dbe7c 567
acarter2 0:4a8b751dbe7c 568
acarter2 0:4a8b751dbe7c 569 /*
acarter2 0:4a8b751dbe7c 570 /this is function that will written to the memory of the from the buffer so that will be fast
acarter2 0:4a8b751dbe7c 571 / and did not lose anydata
acarter2 0:4a8b751dbe7c 572 */
acarter2 0:4a8b751dbe7c 573 void writtenToMemory(const void* arg )
acarter2 0:4a8b751dbe7c 574 {
acarter2 0:4a8b751dbe7c 575
acarter2 0:4a8b751dbe7c 576 }
acarter2 0:4a8b751dbe7c 577
acarter2 0:4a8b751dbe7c 578
acarter2 0:4a8b751dbe7c 579 /*
acarter2 0:4a8b751dbe7c 580 /this is he deleteRecords which will move the buffer regard so that the bufferent will over
acarter2 0:4a8b751dbe7c 581 /write to the old data in the fifo buffer
acarter2 0:4a8b751dbe7c 582 */
acarter2 0:4a8b751dbe7c 583 void deleteRecord(const void* arg )
acarter2 0:4a8b751dbe7c 584 {
acarter2 0:4a8b751dbe7c 585
acarter2 0:4a8b751dbe7c 586 }
acarter2 0:4a8b751dbe7c 587
acarter2 0:4a8b751dbe7c 588
acarter2 0:4a8b751dbe7c 589 /*
acarter2 0:4a8b751dbe7c 590 /read Record is the most reason data which which is store in the data
acarter2 0:4a8b751dbe7c 591 */
acarter2 0:4a8b751dbe7c 592 void readRecord(const void* arg )
acarter2 0:4a8b751dbe7c 593 {
acarter2 0:4a8b751dbe7c 594
acarter2 0:4a8b751dbe7c 595 }
acarter2 0:4a8b751dbe7c 596
acarter2 0:4a8b751dbe7c 597
acarter2 0:4a8b751dbe7c 598 /*
acarter2 0:4a8b751dbe7c 599 /read Record is the selected data which be passed in as a a string
acarter2 0:4a8b751dbe7c 600 */
acarter2 3:f61ae69ed662 601 void printCurrentRecord(char displayString, int length)
acarter2 3:f61ae69ed662 602 {
acarter2 3:f61ae69ed662 603 printf("%c\n", displayString);
acarter2 0:4a8b751dbe7c 604
acarter2 0:4a8b751dbe7c 605
acarter2 0:4a8b751dbe7c 606 }
acarter2 0:4a8b751dbe7c 607
acarter2 0:4a8b751dbe7c 608 void deleteAll(BufferStartPointer* bufferStart, BufferEndPointer* bufferEnd){
acarter2 0:4a8b751dbe7c 609
acarter2 0:4a8b751dbe7c 610 while(bufferStart -> lock()){}
acarter2 0:4a8b751dbe7c 611 bufferStart -> setBufferStartPointer(0);
acarter2 0:4a8b751dbe7c 612 bufferStart -> unlock();
acarter2 0:4a8b751dbe7c 613
acarter2 0:4a8b751dbe7c 614 while(bufferEnd -> lock()){};
acarter2 0:4a8b751dbe7c 615 bufferEnd -> setBufferEndPointer(0);
acarter2 0:4a8b751dbe7c 616 bufferEnd -> unlock();
acarter2 0:4a8b751dbe7c 617
acarter2 0:4a8b751dbe7c 618
acarter2 0:4a8b751dbe7c 619 // need the ram memory
acarter2 0:4a8b751dbe7c 620
acarter2 0:4a8b751dbe7c 621
acarter2 0:4a8b751dbe7c 622
acarter2 0:4a8b751dbe7c 623
acarter2 0:4a8b751dbe7c 624
acarter2 0:4a8b751dbe7c 625 }
acarter2 0:4a8b751dbe7c 626
acarter2 0:4a8b751dbe7c 627 /*
acarter2 0:4a8b751dbe7c 628 /this is the fuction which update the the sample rate so the int to
acarter2 0:4a8b751dbe7c 629 /update the value whoch might hange
acarter2 0:4a8b751dbe7c 630 */
acarter2 0:4a8b751dbe7c 631 void updateSampleRate(double newSampleRate, SampleRate* sampleRate)
acarter2 0:4a8b751dbe7c 632 {
acarter2 0:4a8b751dbe7c 633 while(!sampleRate -> lock()){};
acarter2 3:f61ae69ed662 634 char outputString = 'OUT OF RANGE';
acarter2 3:f61ae69ed662 635
acarter2 0:4a8b751dbe7c 636 if(newSampleRate =>0.1 && newSampleRate =<60.0){
acarter2 3:f61ae69ed662 637 sampleRate -> setSampleRate(newSampleRate);
acarter2 3:f61ae69ed662 638 char decimel;
acarter2 3:f61ae69ed662 639 printDouble(&decimel, newSampleRate, 2);
acarter2 3:f61ae69ed662 640
acarter2 3:f61ae69ed662 641 outputString = 'UPDATE<' + decimel+ '>';
acarter2 3:f61ae69ed662 642 }
acarter2 0:4a8b751dbe7c 643 sampleRate -> unlock();
acarter2 0:4a8b751dbe7c 644
acarter2 0:4a8b751dbe7c 645 }
acarter2 0:4a8b751dbe7c 646
acarter2 0:4a8b751dbe7c 647 /*/
acarter2 0:4a8b751dbe7c 648 /this is update the the log so see if the log if the the sample rate
acarter2 0:4a8b751dbe7c 649 ozr not
acarter2 0:4a8b751dbe7c 650 */
acarter2 3:f61ae69ed662 651 void updateLog(char logType, TakeSample *takeSample)
acarter2 0:4a8b751dbe7c 652 {
acarter2 3:f61ae69ed662 653 char output = ' ';
acarter2 3:f61ae69ed662 654
acarter2 3:f61ae69ed662 655 while(takeSample -> lock()){};
acarter2 0:4a8b751dbe7c 656
acarter2 3:f61ae69ed662 657
acarter2 3:f61ae69ed662 658 if(logType == 'NO'){
acarter2 3:f61ae69ed662 659 takeSample -> setTakeSample(false);
acarter2 3:f61ae69ed662 660 output ='Log<ON>';
acarter2 3:f61ae69ed662 661
acarter2 0:4a8b751dbe7c 662
acarter2 0:4a8b751dbe7c 663 }
acarter2 0:4a8b751dbe7c 664
acarter2 3:f61ae69ed662 665 if(logType == 'YES' ){
acarter2 3:f61ae69ed662 666 takeSample -> setTakeSample(true);
acarter2 3:f61ae69ed662 667 output ='Log<OFF>';
acarter2 3:f61ae69ed662 668
acarter2 3:f61ae69ed662 669
acarter2 0:4a8b751dbe7c 670 }
acarter2 0:4a8b751dbe7c 671 takeSample -> unlock();
acarter2 0:4a8b751dbe7c 672
acarter2 0:4a8b751dbe7c 673 //need output tread
acarter2 0:4a8b751dbe7c 674
acarter2 0:4a8b751dbe7c 675 }
acarter2 0:4a8b751dbe7c 676
acarter2 0:4a8b751dbe7c 677 /*
acarter2 0:4a8b751dbe7c 678 /tthis is update th date which the system will go from and with change
acarter2 0:4a8b751dbe7c 679 / the date so that the records are set with the date.
acarter2 0:4a8b751dbe7c 680 */
acarter2 0:4a8b751dbe7c 681 void updateDate(char newDate[])
acarter2 0:4a8b751dbe7c 682 {
acarter2 0:4a8b751dbe7c 683
acarter2 0:4a8b751dbe7c 684 }
acarter2 0:4a8b751dbe7c 685
acarter2 0:4a8b751dbe7c 686 /*
acarter2 0:4a8b751dbe7c 687 /tthis is update th time which the system will go from and with change
acarter2 0:4a8b751dbe7c 688 / the time so that the records are set with the date.
acarter2 0:4a8b751dbe7c 689 */
acarter2 0:4a8b751dbe7c 690 void updateTime(char newTime[])
acarter2 0:4a8b751dbe7c 691 {
acarter2 0:4a8b751dbe7c 692
acarter2 0:4a8b751dbe7c 693 }
acarter2 0:4a8b751dbe7c 694
acarter2 3:f61ae69ed662 695 void updateDisplayState(SampleDisplay* sampleDisplay, char displayString){
acarter2 0:4a8b751dbe7c 696
acarter2 3:f61ae69ed662 697 char output = ' ';
acarter2 0:4a8b751dbe7c 698
acarter2 0:4a8b751dbe7c 699 while(!sampleDisplay -> lock()){};
acarter2 3:f61ae69ed662 700 if(displayString == 'NO'){
acarter2 3:f61ae69ed662 701 sampleDisplay -> setDisplay(false);
acarter2 3:f61ae69ed662 702 output = 'SAMPLING<ON>';
acarter2 0:4a8b751dbe7c 703
acarter2 0:4a8b751dbe7c 704 }
acarter2 0:4a8b751dbe7c 705
acarter2 3:f61ae69ed662 706 if(displayString == 'YES'){
acarter2 3:f61ae69ed662 707 sampleDisplay -> setDisplay(true);
acarter2 3:f61ae69ed662 708 output = 'SAMPLING<OFF>';
acarter2 3:f61ae69ed662 709
acarter2 3:f61ae69ed662 710
acarter2 0:4a8b751dbe7c 711 }
acarter2 0:4a8b751dbe7c 712 sampleDisplay -> unlock();
acarter2 0:4a8b751dbe7c 713
acarter2 0:4a8b751dbe7c 714 }
acarter2 0:4a8b751dbe7c 715
acarter2 0:4a8b751dbe7c 716 void readInput(){
acarter2 0:4a8b751dbe7c 717
acarter2 0:4a8b751dbe7c 718 char ch;
acarter2 0:4a8b751dbe7c 719 char input[100];
acarter2 3:f61ae69ed662 720 int place = 0;
acarter2 0:4a8b751dbe7c 721 do
acarter2 0:4a8b751dbe7c 722 {
acarter2 0:4a8b751dbe7c 723 ch = getchar();
acarter2 0:4a8b751dbe7c 724 if(ch != EOF || ch != '\n'|| ch != ' '){
acarter2 3:f61ae69ed662 725 input[place] = ch;
acarter2 3:f61ae69ed662 726 place++;
acarter2 0:4a8b751dbe7c 727 }
acarter2 0:4a8b751dbe7c 728
acarter2 0:4a8b751dbe7c 729 }while( ch != '\n' || ch != EOF);
acarter2 0:4a8b751dbe7c 730
acarter2 3:f61ae69ed662 731 if(place> 1){
acarter2 0:4a8b751dbe7c 732
acarter2 0:4a8b751dbe7c 733 //Thread stringMutipluation;
acarter2 0:4a8b751dbe7c 734
acarter2 0:4a8b751dbe7c 735 //stringMutipluation =7 new Thread(sortString);
acarter2 0:4a8b751dbe7c 736
acarter2 0:4a8b751dbe7c 737
acarter2 0:4a8b751dbe7c 738 }
acarter2 0:4a8b751dbe7c 739 }
acarter2 0:4a8b751dbe7c 740
acarter2 0:4a8b751dbe7c 741
acarter2 0:4a8b751dbe7c 742 // setting up gobal treads to be uses in the program
acarter2 0:4a8b751dbe7c 743 //Thread producter();
acarter2 0:4a8b751dbe7c 744 //Thread customer;
acarter2 0:4a8b751dbe7c 745 //Thread tempTread;
acarter2 0:4a8b751dbe7c 746 //Thread humTread;
acarter2 0:4a8b751dbe7c 747 //Thread pressTread(;
acarter2 0:4a8b751dbe7c 748 //Thread displayTread;
acarter2 0:4a8b751dbe7c 749 //Thread sampleTread;
acarter2 0:4a8b751dbe7c 750 Thread inputTread;
acarter2 0:4a8b751dbe7c 751 Thread deleteRecordTread(deleteRecord);
acarter2 0:4a8b751dbe7c 752 //Thread setDateTread;
acarter2 0:4a8b751dbe7c 753 //Thread setTimeTread;
acarter2 0:4a8b751dbe7c 754 //Thread dsiplaySelectedRecord;
acarter2 0:4a8b751dbe7c 755 //Thread updateTakeDisplay;
acarter2 0:4a8b751dbe7c 756 //Thread updateTreadTiming;
acarter2 0:4a8b751dbe7c 757 //Thread stringMutipluation;
acarter2 0:4a8b751dbe7c 758
acarter2 0:4a8b751dbe7c 759
acarter2 0:4a8b751dbe7c 760 PwmOut mypwm(PWM_OUT);
acarter2 0:4a8b751dbe7c 761
acarter2 0:4a8b751dbe7c 762 DigitalOut myled(LED1);
acarter2 0:4a8b751dbe7c 763
acarter2 0:4a8b751dbe7c 764 int main() {
acarter2 3:f61ae69ed662 765
acarter2 0:4a8b751dbe7c 766
acarter2 0:4a8b751dbe7c 767 SampleRate sampleRate = SampleRate();
acarter2 0:4a8b751dbe7c 768 TakeSample takeSample = TakeSample();
acarter2 0:4a8b751dbe7c 769 SampleTemp sampleTemp = SampleTemp();
acarter2 0:4a8b751dbe7c 770 SampleHumitaty sampleHumitaty = SampleHumitaty();
acarter2 0:4a8b751dbe7c 771 SamplePressure samplePressure = SamplePressure();
acarter2 0:4a8b751dbe7c 772 SampleDisplay sampleDisplay = SampleDisplay();
acarter2 0:4a8b751dbe7c 773 BufferStartPointer bufferStartPointer = BufferStartPointer();
acarter2 0:4a8b751dbe7c 774 BufferEndPointer bufferEndPointer = BufferEndPointer();
acarter2 1:4cd93767691a 775 bufferLock = new Mutex();
acarter2 0:4a8b751dbe7c 776
acarter2 0:4a8b751dbe7c 777
acarter2 0:4a8b751dbe7c 778 while(1) {
acarter2 0:4a8b751dbe7c 779
acarter2 0:4a8b751dbe7c 780 readInput();
acarter2 0:4a8b751dbe7c 781
acarter2 0:4a8b751dbe7c 782
acarter2 0:4a8b751dbe7c 783 myled = !myled;
acarter2 0:4a8b751dbe7c 784 wait(1);
acarter2 0:4a8b751dbe7c 785 }
acarter2 0:4a8b751dbe7c 786 }
acarter2 0:4a8b751dbe7c 787