Lab 7

Dependencies:   MPL3115A2 mbed

Fork of AltTest2 by CPS_Lab*

Revision:
4:eaaf67c5e1ca
Parent:
3:93ba3e6cdaf3
Child:
5:96b831624184
--- a/main.cpp	Fri Mar 02 17:41:05 2018 +0000
+++ b/main.cpp	Sun Mar 04 20:39:06 2018 +0000
@@ -2,21 +2,70 @@
 #include "MPL3115A2.h"
 #include <string.h>
 #include <stdlib.h>
-
+ 
 Serial pc(SERIAL_TX, SERIAL_RX);
 DigitalOut myled(LED1);
+DigitalIn lever(PA_12); //D2 'on' = 1 
 MPL3115A2 pressure_sensor(PB_7,PB_6,0x60);
 
-/*
-char *int_array_to_string(uint8_t int_array[], int size_of_array) {
-  char returnstring[size_of_array];
-  for (int temp = 0; temp < size_of_array; temp++)
-    returnstring[temp] = itoa(int_array[temp]);
-  return returnstring;
+//LocalFileSystem local("local");
+
+/*returns max speed given array of altitudes and length*/
+double calcspeed(double j, double *altitude)
+{
+    int i;
+    double tmp, maxspeed =0;
+    for(i = 1; i < j; i++)
+    {
+       tmp = (altitude[i] - altitude[i-1]);
+       if(tmp > maxspeed)
+            maxspeed = tmp;
+    }
+    return(maxspeed);     
+}
+
+void graph(double *alt, int time)
+{
+    FILE *fp = fopen("speed.txt","w");
+    double speeds[time/2];
+    int i;
+    for(i = 1; i < time/2; i++)
+        speeds[i-1] = alt[i]-alt[i-1];
+    for(i = 0; i < time/2; i++)
+        fprintf(fp, "%lf\n\r", speeds[i]);
+    
+    fclose(fp);
 }
-*/
+
+/* returns max speed */
+void elevator(void)
+{
+    double alt[100], pressure[100], temp[100];
+    double maxspeed;
+    int j=0, i;
+    printf("Data collection starting\n\r"); 
+    while(1)
+    {
+         pressure[j] = pressure_sensor.getPressure();
+         alt[j] = pressure_sensor.getAltitude();
+         temp[j] = pressure_sensor.getTemperature();
+         myled = !myled;
+         j++;
+         if(lever == 0)
+            break;
+    }
+    printf("Data collection ended\n\r");
+    printf("Time \t Altitude(m) \t Pressure(hPa) \t Temperature(C)\n\r");
+    for(i = 0; i < j; i++)
+        printf("%d \t %lf \t %lf \t %lf\n\r", i, alt[i], pressure[i], temp[i]);
+    maxspeed = calcspeed(j, alt); 
+    printf("The max speed was: %lf\n\r", maxspeed);
+    //graph(alt, j);        
+}
+ 
 int MPL3115A2_reg_print(int start, int length) {
-    
+    uint8_t value;  //the array with the register value
+ 
     if(length == 0)
         length = 45;
     int i = start, end = start + length;     
@@ -28,14 +77,10 @@
         return(-1);
     if (end > 46)
         return(-1);
-         
-    printf("Hola\n\r");
-    uint8_t valArray[10];  //the array of register values we'll be returning 
-    for(int j = 0; j<10; j++)
-        valArray[j] = 7;   
-
-    for( i = start; i <=end; i++) {
+        
+    for( i = start; i <= end; i++) {
         char name[25];
+        pressure_sensor.readRegs(i, &value, 8); //read the registers 1 at a time
         switch (i) {
                 case 0x00:
                     strcpy(name,"MPL_STATUS");
@@ -177,41 +222,27 @@
                     break;
                 default:
                     printf("ERR\n\r");
-        }
-        pressure_sensor.readRegs(i, valArray, 1);    
-        printf("0x%02X: %s = 0x%02x\n\r", i, name, valArray[0]);
+        }    
+        printf("0x%02X: %s = 0x%02X\n\r", i, name, value);
         
-    
     }
     return(0);
 } 
-
-
+ 
+ 
 int main() {
-    int start, length, return_val;
-    uint8_t id;
-    printf("Hola\n\r");
+    int start, length;
+    printf("Hola, buenas tardes\n\r");
     printf("Enter start: \n\r");
     scanf("%d", &start);
     printf("Enter length: \n\r");
     scanf("%d", &length);
-    printf("Printing registers: \n\r");
-    return_val = MPL3115A2_reg_print(start, length);
-    printf("%d\n\r", return_val);
-    pc.printf("\n\r*** MPL3115A2 Pressure/Temperature Sensor Test *** \n\r");
-    while ((id=pressure_sensor.getID())!=0xC4) {
-        pc.printf("Status read unsuccessful: Value = 0x%02x\n\r",id);
-        pc.printf("Check wiring to the pressure sensor\n\r",id);
-        pc.printf("Retesting for correct ID in 1 second...\n\r");
-        wait(1);
+    MPL3115A2_reg_print(start, length);
+    while (1){
+        if(lever == 1)
+            elevator();
+        wait(10);
     }
-    pc.printf("Status read successfully: Value = 0x%02x\n\r",id);
-    pc.printf("***1hz readings from the pressure sensor***\n\r");
-    while(1) {
-        pc.printf("%f hPA; %f m\n\r",pressure_sensor.getPressure(),pressure_sensor.getAltitude());
-        myled = !myled;
-        wait(1);
-    }
-    
-    //no return; while(1) never exited       
+    //no return; while(1) never exited  
+         
 } 
\ No newline at end of file