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

Dependencies:   TextLCD mbed

Revision:
7:882edb5f9466
Parent:
6:e57f9887ad02
Child:
9:38d287593320
diff -r e57f9887ad02 -r 882edb5f9466 Sensor.cpp
--- a/Sensor.cpp	Wed May 25 09:16:13 2016 +0000
+++ b/Sensor.cpp	Fri May 27 14:36:15 2016 +0000
@@ -6,35 +6,46 @@
 * Changes:      keine
 ***********************************************************************************/
 
-/*define*/
-#define pi 3.141
-#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"
 
+/*define*/
+#define pi 3.141
+
+#define URefX 1.6135
+#define UDiffX 0.3255
+
+#define URefY 1.6135
+#define UDiffY 0.3255
+
+#define URefZ 1.6135
+#define UDiffZ 0.3255
+
 /* Variabeln */
+
 /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/
 struct SensData stSensData;
+
 /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/
 struct WinkelData stWinkelData;
-    
-/*AnalogIn*/
+
 /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/
 AnalogIn oZData(PC_2);
 AnalogIn oYData(PC_3);
 AnalogIn oXData(PC_4);
 
+/************************************************************************************
+* void vgetSensData(struct SensData *stSensData)
+* Zweck:    Auslesen der Sensordaten (X-, Y- und Z-Daten) und speichern in
+            Strukturen.          
+* Parameter:
+    *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern 
+                 der X-, Y-, und Z-Daten des Sensors. 
+* return Parameter:
+    keine
+*************************************************************************************/
 void vgetSensData(struct SensData *stSensData){
     /* Variabeln */
     int i=0;                    // Laufvariable
@@ -46,7 +57,7 @@
     for(i=0; i<10000; i++){
     XDataRead += oXData.read_u16();
     YDataRead += oYData.read_u16();
-    //ZDataRead += oZData.read_u16();
+    ZDataRead += oZData.read_u16();
     }
     stSensData->wSensX = XDataRead/10000;
     stSensData->wSensY = YDataRead/10000;
@@ -57,27 +68,47 @@
     YDataRead = 0.0;
     ZDataRead = 0.0;
     }
-    
+
+/************************************************************************************
+* void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData)
+* Zweck:    Umrechnen der Sensorwerte in Winkel, sowie Auswertung der Lage für
+            LED-Ansteuerung.         
+* Parameter:
+    *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern 
+                 der X-, Y-, und Z-Daten des Sensors. 
+    *stWinkelData: Pointer auf eine Struktur vom Typ WinkelData zum Abspeichern
+                   der berechneten Winkel für die X-, Y- und Z-Achse.             
+* return Parameter:
+    keine
+*************************************************************************************/    
 void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){
     /*Variablen*/
     double dGMessX;
     double dGMessY;
     double dGMessZ;
-    /* Umrechnen der Messdaten in Spannungen */
-    dGMessX = (stSensData->wSensX/65535.0)*3.3;  
-    //stWinkelData->i16WinkelY = dGMessX*1000;
+    /* Berechnung des Z-Winkels */
+    dGMessZ = (stSensData->wSensZ/65535.0)*3.3;
+    stWinkelData->i16WinkelZ = dGMessZ*10000;
+    /* Auswertung (> 90°) */
+    // Tbd
+    /* Berechnung des X-Winkels */
+    dGMessX = (stSensData->wSensX/65535.0)*3.3;
+    stWinkelData->i16WinkelX = dGMessX*10000;
+    /*  
     dGMessX = (int)(dGMessX*1000)/1000.0;
-    dGMessX = abs(dGMessX-URef)/(UDiff);
+    dGMessX = abs(dGMessX-URefX)/(UDiffX);
     dGMessX = (int)(dGMessX*1000)/1000.0;
     if(dGMessX<=1 || dGMessX>=-1){
     stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
-        }
-        
+        }/*
+    /* Berechnung des Y-Winkels */    
     dGMessY = (stSensData->wSensY/65535.0)*3.3;
+    stWinkelData->i16WinkelY = dGMessY*10000;
+    /*
     dGMessY = (int)(dGMessY*1000)/1000.0; 
-    dGMessY = abs(dGMessY-URef)/UDiff;
+    dGMessY = abs(dGMessY-URefY)/UDiffY;
     dGMessY = (int)(dGMessY*1000)/1000.0;
     if(dGMessY<=1 || dGMessY>=-1){
-    stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); 
-        } 
+    stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
+        } */
     }
\ No newline at end of file