Xbee comms for sensor box

Dependencies:   MMA8451Q mbed nRF24L01P

Fork of Sensor_Box by Sensor CDT

Files at this revision

API Documentation at this revision

Comitter:
jaehughes
Date:
Wed Jul 01 22:13:56 2015 +0000
Parent:
5:7c53f5f2af8d
Child:
7:03334e89478d
Commit message:
added stuff

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Jul 01 21:16:03 2015 +0000
+++ b/main.cpp	Wed Jul 01 22:13:56 2015 +0000
@@ -6,6 +6,7 @@
 
 #define MMA8451_I2C_ADDRESS (0x1d<<1)
 #define TRANSFER_SIZE   24
+#define ARRAY_LENGTH    20
 
 Serial pc(USBTX, USBRX); // tx, rx
 
@@ -15,6 +16,8 @@
 AnalogIn light_ain(A0);
 AnalogIn temp_ain(A1);
 AnalogIn pir_ain(A3);
+AnalogIn sound_ain(A4);
+AnalogIn noise_ain(A5);
 
 nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTE1, PTE0, PTD0);    // mosi, miso, sck, csn, ce, irq
 
@@ -24,39 +27,77 @@
 uint16_t light;
 uint16_t temp;
 uint16_t pir;
+uint16_t noise;
 
 std::vector<uint16_t> light_data;
 std::vector<uint16_t> temp_data;
 std::vector<uint16_t> pir_data;
+std::vector<uint16_t> noise_data;
 
 void getdata()
 {
     light = light_ain.read_u16();
     temp = temp_ain.read_u16();
     pir = pir_ain.read_u16();
+    noise = noise_ain.read_u16();
 
     light_data.push_back (light);
     temp_data.push_back (temp);
     pir_data.push_back (pir);
+    noise_data.push_back (noise);
 
     light_data.pop_back();
     temp_data.pop_back();
     pir_data.pop_back();
-    
-        
+    noise_data.pop_back();
+
     printf("%f\n", light_data);
-   
 }
 
+void average()
+{
+    int light_sum = 0;
+    int temp_sum = 0;
+    int noise_sum = 0;
+    float light_avg, temp_avg, noise_avg, light_var, temp_var, noise_var;
+    float light_residuals =0; 
+    float temp_residuals = 0 ; 
+    float noise_residuals = 0; 
+ 
+    for (int i = 0; i < ARRAY_LENGTH; i++) {
+        light_sum += light_data[i];
+        temp_sum += temp_data[i];
+        noise_sum += noise_data[i];
+    }
+    light_avg = light_sum / (float)ARRAY_LENGTH;
+    temp_avg = temp_sum / (float)ARRAY_LENGTH;
+    noise_avg = noise_sum / (float)ARRAY_LENGTH;
+    
+    /*  Compute  variance  and standard deviation  */
+    for (int i = 0; i < ARRAY_LENGTH; i++) {
+       light_residuals += pow((light_data[i] - light_avg), 2);
+       temp_residuals += pow((temp_data[i] - temp_avg), 2);      
+       noise_residuals += pow((noise_data[i] - noise_avg), 2);       
+    }
+    light_var = light_residuals/(float)ARRAY_LENGTH;
+    temp_var = temp_residuals/(float)ARRAY_LENGTH;
+    noise_var = noise_residuals/(float)ARRAY_LENGTH;
+    
+    printf("Light Average = %.2f\n", light_avg);
+    printf("Temp Average = %.2f\n", temp_avg);
+    printf("Noise Average = %.2f\n", noise_avg);
+}
+
+
 
 int main()
 {
 
     MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
 
-    light_data.assign (20,0);
-    temp_data.assign (20,0);
-    pir_data.assign (20,0);
+    light_data.assign (ARRAY_LENGTH,0);
+    temp_data.assign (ARRAY_LENGTH,0);
+    pir_data.assign (ARRAY_LENGTH,0);
 
 
     char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
@@ -83,13 +124,12 @@
 
     while (1) {
         getdata();
-
+        average();
         // txDataCnt =  sprintf(txData, "  %1.3f   %1.3f   %1.3f\n", x,y,z);
         //my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
         myled1 = !myled1;
         wait(0.5);
     }
-
 }