Team S - EDP 2 / Mbed 2 deprecated signal_processing

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
2247469r
Date:
Wed Feb 14 15:26:02 2018 +0000
Parent:
4:878821708feb
Commit message:
Added flashing LED function (potential bugs).

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Feb 14 11:56:50 2018 +0000
+++ b/main.cpp	Wed Feb 14 15:26:02 2018 +0000
@@ -1,13 +1,16 @@
-//Rango says, hey there Conor!
+//Rango says, hey there Connnor!
 
 #include "mbed.h"
 
-DigitalOut myled(LED1);
+DigitalOut led(LED1);
 AnalogIn Ain(PTB1);
 
 int const MAX_B = 10;
 int const alpha = 0.5;
 int const AVG_LEN = 160;
+float const DISP_MAX = 7; //size of display indexed from 0
+float const trigger_high = DISP_MAX/2 + 1;
+float const trigger_low = DISP_MAX/2 - 1;
 
 int sample_buffer[2*MAX_B] = {};
 int local_buffer[2*MAX_B] = {};
@@ -20,7 +23,9 @@
 int avg_sum;
 bool first;
 float avg;
-float pre_avg;
+float pre_point;
+
+bool rising = false;
 
 Ticker sampler;
 
@@ -31,19 +36,39 @@
     
 }
 
-float scale (float point) {  //Multiply by scale factor
-    return point*7 ;
+float min_of_avg(){
+    int min = avg_buffer[0];
+    for (int i = 0; i < AVG_LEN; i++){
+        if (avg_buffer[i] < min){
+            min = avg_buffer[i];
+        }
+    }
+    return min;
+}
+
+float max_of_avg(){
+    int max = avg_buffer[0];
+    for (int i = 0; i < AVG_LEN; i++){
+        if (avg_buffer[i] > max){
+            max = avg_buffer[i];
+        }
+    }
+    return max;
+}
+
+float normalise(float point) {  //Normalise the value
+    float avg_min = min_of_avg();
+    return (DISP_MAX * (point / (max_of_avg() - avg_min)) + avg_min);
 }
 
 float filter (float output) {  //Filter signal digtally to make more precise
-    float point = alpha*output + (1- alpha)*pre_avg;
-    point = scale(point);
+    float point = alpha*output + (1- alpha)*pre_point;
+    point = normalise(point);
     return point;
 }
 
-float get_trend(){  //Normalise signal by removing trend
+float average(){
     float point;
-    pre_avg = avg;
     avg = avg_sum/AVG_LEN;
     int normalised = avg_buffer[avg_write-1] - avg;
     point = filter(normalised);
@@ -53,15 +78,51 @@
     
 }
 
-float normalise() {  //Normalise values
+bool above_trig_low(float point){
+    if(point <= trigger_low){
+        rising = false;
+        return true;
+    }
+    return false;
+}
+
+bool above_trig_high(float point){
+    if(point >= trigger_high){
+        rising = true;
+        return true;
+    }
+    return false;
+}
+
+void identify_pulse(float point) {
+    // Implementation of hysteresis
+    if(rising){
+        if (!above_trig_low(point)){
+            led = 1;
+        } else {
+            led = 0;
+        }
+    } else if (!rising){
+        if (!above_trig_high(point)){
+            led = 0;
+        } else {
+            led = 1;
+        }
+    }
+}
+
+float data_process() {  //Setup for data process
    float point ;
     if (first) {
         for (int i =0; i <MAX_B; i++) {
-            avg_buffer[avg_write] = local_buffer[i];
+            int data = local_buffer[i];
+            avg_buffer[avg_write] = data;
             avg_write = (++avg_write) % AVG_LEN;
-            }
-            if (write == 0) {
-                first = false;
+            avg_sum += data;
+        }
+        if (avg_write == 0) {
+            first = false;
+            pre_point = local_buffer[MAX_B - 1];
         }
     }
     else {
@@ -70,26 +131,19 @@
             avg_sum = avg_sum + data - avg_buffer[avg_write];
             
             avg_buffer[avg_write] = data;
-            avg_write = (++avg_write) % AVG_LEN;     
-            point = get_trend();
-            
+            avg_write = (++avg_write) % AVG_LEN;
+            pre_point = point;
+            point = average();
+            identify_pulse(point);
         }
     }
     return point;  //The tenth point
         
 }
 
-float data_process() {
-    return normalise();
+void write_to_display(float output) {
 }
 
-void write_to_display(float output) {
-    }
-    
-void identify_pulse(float ouput) {
-    
-    
-} 
 int main() {
     sampler.attach(&sampling, 0.0125); //Sample at 80Hz 
     
@@ -101,7 +155,7 @@
             }
         }
         float output = data_process();
-        identify_pulse(output);
+        
         write_to_display(output);
     }
 }