fuck this
Dependencies: BMP280
Sampling.cpp@7:bf9f92ff02e8, 2018-01-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |