Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.

Dependencies:   TextLCD mbed

Revision:
5:c0d6d490dd5b
Parent:
4:ed779bcb8ce6
Child:
6:e57f9887ad02
--- a/Sensor.cpp	Tue May 24 13:43:39 2016 +0000
+++ b/Sensor.cpp	Tue May 24 20:21:58 2016 +0000
@@ -8,18 +8,26 @@
 
 /*define*/
 #define pi 3.141
-#define URef 1.660
-#define UDiff 0.332
+#define URef 1.6135
+
+#define UDiff 0.3255
+
+/* Referenzmessung bezogen auf die X-Achse*/
+// X(-1g) = 1.288 V
+// X(1g)  = 1.939 V
+// X(0g)  = 1.6135 V
+// U/1g   = 0.3255 V
 
 /*Include*/
 #include "Sensor.h"
 #include "mbed.h"
 #include "math.h"
 
+/* Variabeln */
 /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/
-struct SensData sSensData;
+struct SensData stSensData;
 /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/
-struct WinkelData sWinkelData;
+struct WinkelData stWinkelData;
     
 /*AnalogIn*/
 /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/
@@ -27,35 +35,49 @@
 AnalogIn oYData(PC_3);
 AnalogIn oXData(PC_4);
 
-void vgetSensData(struct SensData *sSensData){
-    /*Auslesen der Daten und Speichern in Struktur*/
-    sSensData->wSensX=oXData.read_u16();
-    sSensData->wSensY=oYData.read_u16();
-    sSensData->wSensZ=oZData.read_u16();
+void vgetSensData(struct SensData *stSensData){
+    /* Variabeln */
+    int i=0;                    // Laufvariable
+    double XDataRead = 0.0;     // Speichervariabel für X Sampels           
+    double YDataRead = 0.0;     // Speichervariabel für Y Sampels
+    double ZDataRead = 0.0;     // Speichervariabel für Z Sampels
+    
+    /*Auslesen der Daten, Mittelung und Speichern in Struktur*/
+    for(i=0; i<10000; i++){
+    XDataRead += oXData.read_u16();
+    //YDataRead += oYData.read_u16();
+    //ZDataRead += oZData.read_u16();
+    }
+    stSensData->wSensX = XDataRead/10000;
+    stSensData->wSensY = YDataRead/10000;
+    stSensData->wSensZ = ZDataRead/10000;
+    
+    /* Rücksetzten der Speichervariabeln*/
+    XDataRead = 0.0;
+    YDataRead = 0.0;
+    ZDataRead = 0.0;
     }
     
-void vcalcData(struct SensData *sSensData, struct WinkelData *sWinkelData){
+void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){
     /*Variablen*/
     double dGMessX;
     double dGMessY;
     double dGMessZ;
     /* Umrechnen der Messdaten in Spannungen */
-    dGMessX = (sSensData->wSensX/65535.0)*3.3;
-    dGMessX = (int)(dGMessX*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen!
-    dGMessX = abs(dGMessX-URef)/UDiff;
+    dGMessX = (stSensData->wSensX/65535.0)*3.3;  
+    stWinkelData->i16WinkelY = dGMessX*1000;
+    dGMessX = (int)(dGMessX*1000)/1000.0;
+    dGMessX = abs(dGMessX-URef)/(UDiff);
     dGMessX = (int)(dGMessX*1000)/1000.0;
     if(dGMessX<=1 || dGMessX>=-1){
-    sWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
-    }
-    
-    dGMessY = (sSensData->wSensY/65535.0)*3.3;
-    dGMessY = (int)(dGMessY*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen!
+    stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
+        }
+    /*    
+    dGMessY = (stSensData->wSensY/65535.0)*3.3;
+    dGMessY = (int)(dGMessY*10000)/10000.0; 
     dGMessY = abs(dGMessY-URef)/UDiff;
-    dGMessY = (int)(dGMessY*1000)/1000.0;
+    dGMessY = (int)(dGMessY*10000)/10000.0;
     if(dGMessY<=1 || dGMessY>=-1){
-    sWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
-    }
-    
-    /* Umrechnen der Spannungen in g-Kräfte*/
-    /* Umrechnen der g-Kräfte in Winkel*/
+    stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); 
+        } */
     }
\ No newline at end of file