fuck this

Dependencies:   BMP280

Committer:
Swaggie
Date:
Thu Jan 04 17:34:57 2018 +0000
Revision:
7:bf9f92ff02e8
Parent:
6:8e1795a5886b
Child:
8:dbb57b4d5ba4
Sampling functions and flow now complete, except for time.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Swaggie 5:bea93c8e50b7 1 #include "Sampling.h"
Swaggie 5:bea93c8e50b7 2 #include "mbed.h"
Swaggie 5:bea93c8e50b7 3
Swaggie 6:8e1795a5886b 4 //Thread Sync Tools
Swaggie 6:8e1795a5886b 5 Mutex tempReadingsLock;
Swaggie 6:8e1795a5886b 6 Mutex presReadingsLock;
Swaggie 6:8e1795a5886b 7 Mutex LDRReadingsLock;
Swaggie 7:bf9f92ff02e8 8 Mutex timeReadingsLock;
Swaggie 6:8e1795a5886b 9
Swaggie 6:8e1795a5886b 10 //Buffers
Swaggie 6:8e1795a5886b 11 float tempReadings[BUFFERSIZE];
Swaggie 6:8e1795a5886b 12 float presReadings[BUFFERSIZE];
Swaggie 6:8e1795a5886b 13 float LDRReadings[BUFFERSIZE];
Swaggie 7:bf9f92ff02e8 14 float timeReadings[BUFFERSIZE];
Swaggie 6:8e1795a5886b 15
Swaggie 7:bf9f92ff02e8 16 //Index
Swaggie 7:bf9f92ff02e8 17 unsigned short newestIndex = BUFFERSIZE-1;
Swaggie 7:bf9f92ff02e8 18 unsigned short oldestIndex = BUFFERSIZE-1;
Swaggie 7:bf9f92ff02e8 19
Swaggie 7:bf9f92ff02e8 20 bool firstSample = true;
Swaggie 6:8e1795a5886b 21
Swaggie 7:bf9f92ff02e8 22 //Hardware
Swaggie 7:bf9f92ff02e8 23 #ifdef BME
Swaggie 7:bf9f92ff02e8 24 BME280 sensor(D14, D15);
Swaggie 7:bf9f92ff02e8 25 #else
Swaggie 7:bf9f92ff02e8 26 BMP280 sensor(D14, D15);
Swaggie 7:bf9f92ff02e8 27 #endif
Swaggie 7:bf9f92ff02e8 28 AnalogIn LDRSensor(PA_1); //Check this is the correct pin
Swaggie 6:8e1795a5886b 29
Swaggie 5:bea93c8e50b7 30 void SampleTimerISR(void)
Swaggie 5:bea93c8e50b7 31 {
Swaggie 5:bea93c8e50b7 32 //Flag Threads
Swaggie 7:bf9f92ff02e8 33 t1.signal_set(1);
Swaggie 7:bf9f92ff02e8 34 t2.signal_set(1);
Swaggie 5:bea93c8e50b7 35 }
Swaggie 7:bf9f92ff02e8 36
Swaggie 5:bea93c8e50b7 37 void ConfigThreadsAndIR(void)
Swaggie 5:bea93c8e50b7 38 {
Swaggie 7:bf9f92ff02e8 39 NewEnvSample = false; //Reset
Swaggie 7:bf9f92ff02e8 40 NewLDRSample = false; //Reset
Swaggie 7:bf9f92ff02e8 41
Swaggie 7:bf9f92ff02e8 42 t1.start(ThreadSampleEnvSensor);
Swaggie 7:bf9f92ff02e8 43 t2.start(ThreadSampleLDR);
Swaggie 7:bf9f92ff02e8 44
Swaggie 7:bf9f92ff02e8 45 sampleRate.attach(SampleTimerISR, 15); //15 second interval
Swaggie 7:bf9f92ff02e8 46 }
Swaggie 7:bf9f92ff02e8 47
Swaggie 7:bf9f92ff02e8 48 void AddTempSample(float temp)
Swaggie 7:bf9f92ff02e8 49 {
Swaggie 7:bf9f92ff02e8 50 tempReadingsLock.lock(); //Take the key
Swaggie 7:bf9f92ff02e8 51 tempReadings[newestIndex+1] = temp; //Add the sample after the most recent
Swaggie 7:bf9f92ff02e8 52 tempReadingsLock.unlock(); // Release the key
Swaggie 7:bf9f92ff02e8 53 }
Swaggie 7:bf9f92ff02e8 54
Swaggie 7:bf9f92ff02e8 55 void AddPresSample(float pres)
Swaggie 7:bf9f92ff02e8 56 {
Swaggie 7:bf9f92ff02e8 57 presReadingsLock.lock(); //Take the key
Swaggie 7:bf9f92ff02e8 58 presReadings[newestIndex+1] = pres; //Add to register
Swaggie 7:bf9f92ff02e8 59 presReadingsLock.unclock(); //Release the key
Swaggie 6:8e1795a5886b 60 }
Swaggie 6:8e1795a5886b 61
Swaggie 7:bf9f92ff02e8 62 void ThreadSampleEnvSensor(void)
Swaggie 6:8e1795a5886b 63 {
Swaggie 7:bf9f92ff02e8 64 while (true) {
Swaggie 7:bf9f92ff02e8 65 Thread::signal_wait(1); //Wait for signal 1
Swaggie 7:bf9f92ff02e8 66 //Get readings
Swaggie 7:bf9f92ff02e8 67 float temp = sensor.getTemperature();
Swaggie 7:bf9f92ff02e8 68 float pres = sensor.getPressure();
Swaggie 7:bf9f92ff02e8 69 AddPresSample(pres); //Add value to register
Swaggie 7:bf9f92ff02e8 70 AddTempSample(temp); //Add value to register
Swaggie 7:bf9f92ff02e8 71 NewEnvSample = true; //Signal to main thread
Swaggie 7:bf9f92ff02e8 72 }
Swaggie 7:bf9f92ff02e8 73 }
Swaggie 7:bf9f92ff02e8 74
Swaggie 7:bf9f92ff02e8 75 void AddLDRSample(float LDRval)
Swaggie 7:bf9f92ff02e8 76 {
Swaggie 7:bf9f92ff02e8 77 LDRReadingsLock.lock(); //Take the key
Swaggie 7:bf9f92ff02e8 78 LDRReadings[newestIndex+1] = LDR; //Add the sample after the most recent
Swaggie 7:bf9f92ff02e8 79 LDRReadingsLock.unlock(); // Release the key
Swaggie 6:8e1795a5886b 80 }
Swaggie 6:8e1795a5886b 81
Swaggie 7:bf9f92ff02e8 82 void ThreadSampleLDR(void)
Swaggie 6:8e1795a5886b 83 {
Swaggie 7:bf9f92ff02e8 84 while (true) {
Swaggie 7:bf9f92ff02e8 85 Thread::signal_wait(1); //Wait for signal 1
Swaggie 7:bf9f92ff02e8 86 //get readings
Swaggie 7:bf9f92ff02e8 87 float LDRval = LDRSensor.value(); //Read the analogue pin value
Swaggie 7:bf9f92ff02e8 88 //get time function
Swaggie 7:bf9f92ff02e8 89 AddLDRSample(LDRval);
Swaggie 7:bf9f92ff02e8 90 //add time sample
Swaggie 7:bf9f92ff02e8 91 NewLDRSample = true; //signal to main thread
Swaggie 7:bf9f92ff02e8 92 }
Swaggie 7:bf9f92ff02e8 93 }
Swaggie 7:bf9f92ff02e8 94
Swaggie 7:bf9f92ff02e8 95 void IncrementIndex(void)
Swaggie 7:bf9f92ff02e8 96 {
Swaggie 7:bf9f92ff02e8 97 newestIndex++; //Move the index forward one
Swaggie 7:bf9f92ff02e8 98 if (newestIndex == oldestIndex) {
Swaggie 7:bf9f92ff02e8 99 //If this is true then the memory is full and has looped back around and overwritten the oldest sample
Swaggie 7:bf9f92ff02e8 100 //Therefore, we need to move the oldest index pointer
Swaggie 7:bf9f92ff02e8 101 if (firstSample)
Swaggie 7:bf9f92ff02e8 102 {
Swaggie 7:bf9f92ff02e8 103 //this prevents the initial error
Swaggie 7:bf9f92ff02e8 104 oldestIndex++;
Swaggie 7:bf9f92ff02e8 105 firstSample = false;
Swaggie 7:bf9f92ff02e8 106 }
Swaggie 7:bf9f92ff02e8 107 }
Swaggie 7:bf9f92ff02e8 108 }