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

Dependencies:   TextLCD mbed

Revision:
20:094cdb790dcb
Parent:
17:0b9e7a05b203
--- a/Sensor.cpp	Tue Jul 12 14:49:28 2016 +0000
+++ b/Sensor.cpp	Fri Jul 29 14:58:49 2016 +0000
@@ -3,7 +3,23 @@
 * Zweck:        Beinhaltet alle Funktionen zum Auslesen des Beschleunigungssensors
                 bezüglich der X-, Y-, Z-Koordinaten
 * Author:       Simon Rutzen, Nils Kemmer
-* Changes:      keine
+* Changes:      
+    23.05.16    Erstellung des Files, Strukturen und Funktionen vgetSensData, vcalcdata
+    24.05.16    vcalcData Berechnung des Winkels eingefügt (X-Achse), Defines eingefügt
+                Referenzmessungswerte X-Y-Z Achse 0° und +-90° eingetragen, vgetSensData
+                Mittelung des Messwerte eingefügt (alle Achsen), calcData Werte auf 3
+                Nachkommastellen begrenzt
+    25.05.16    Y-Achsen Winkelberechnungen analog zu X-Achse eingefügt
+    27.05.16    Defines Referenzwerte zur Berechnung der Winkel aller Achsen eingefügt
+                Funktionen Kommentare eingefügt
+    05.06.16    Unterscheidung negativer oder positiver Winkel eingefügt (Neigung aller
+                Achsen)
+    28.06.16    vDebugData zur Ermittlung der Spannungswerte vom a-Sensor erstellt
+    30.06.16    Neue Kalibrierung, Defines geändert
+    06.07.16    Endgültige Kalibrierung, Defines angepasst
+    07.07.16    Überkopflage bei 80° definiert, Defines angepasst
+    29.07.16    Anpassung an Programmierrichtlinie-Dokument und letzte endgültige
+                Kontrolle Simon Rutzen
 ***********************************************************************************/
 
 /*Include*/
@@ -25,10 +41,10 @@
 /* Variabeln */
 
 /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/
-struct SensData stSensData = {.wSensX = 0, .wSensY = 0, .wSensZ = 0};
+struct stSensData stSensData = {.wSensX = 0, .wSensY = 0, .wSensZ = 0};
 
-/*Struktur zum Speichern der umgerechneten Messdaten von SensData*/
-struct WinkelData stWinkelData = {.i16WinkelX = 0, .i16WinkelY = 0, .i16SpannungZ = 0};
+/*Struktur zum Speichern der umgerechneten Messdaten von stSensData*/
+struct stWinkelData stWinkelData = {.i16WinkelX = 0, .i16WinkelY = 0, .i16SpannungZ = 0};
 
 /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/
 AnalogIn oZData(PC_2);
@@ -36,16 +52,16 @@
 AnalogIn oXData(PC_4);
 
 /************************************************************************************
-* void vgetSensData(struct SensData *stSensData)
+* void Sensor_vgetSensData(struct stSensData *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 
+    *stSensData: Pointer auf eine Struktur vom Type stSensData zum Abspeichern 
                  der X-, Y-, und Z-Daten des Sensors. 
 * return Parameter:
     keine
 *************************************************************************************/
-void vgetSensData(struct SensData *stSensData){
+void Sensor_vgetSensData(struct stSensData *stSensData){
     /* Variabeln */
     int i=0;                    // Laufvariable
     double XDataRead = 0.0;     // Speichervariabel für X Sampels           
@@ -69,25 +85,26 @@
     }
 
 /************************************************************************************
-* void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData)
+* void Sensor_vcalcData(struct stSensData *stSensData, struct stWinkelData *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 
+    *stSensData: Pointer auf eine Struktur vom Type stSensData 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.             
+    *stWinkelData: Pointer auf eine Struktur vom Typ stWinkelData zum Abspeichern
+                   der berechneten Winkel für die X- und Y-Achse, sowie Spannungswert
+                   für die Z-Achse.             
 * return Parameter:
     keine
 *************************************************************************************/    
-void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){
+void Sensor_vcalcData(struct stSensData *stSensData, struct stWinkelData *stWinkelData){
     /*Variablen*/
-    double dGMessX;
-    double dGMessY;
-    double dGMessZ;
+    double dGMessX = 0.0;
+    double dGMessY = 0.0;
+    double dGMessZ = 0.0;
     
-    int iVorzeichenX = 0;
-    int iVorzeichenY = 0;
+    byte bVorzeichenX = 0;
+    byte bVorzeichenY = 0;
     
     /* Berechnung des Z-Winkels */
     dGMessZ = (stSensData->wSensZ/65535.0)*3.3;
@@ -97,7 +114,7 @@
     dGMessX = (stSensData->wSensX/65535.0)*3.3;
     /* Auswertung des Vorzeichens */
     if(dGMessX<URefX){
-        iVorzeichenX = 1;
+        bVorzeichenX = 1;
         }
     stWinkelData->i16WinkelX = dGMessX*10000; 
     dGMessX = (int)(dGMessX*1000)/1000.0;
@@ -106,12 +123,14 @@
     if(dGMessX<=1 || dGMessX>=-1){
     stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
         }
-    if(iVorzeichenX) stWinkelData->i16WinkelX = -stWinkelData->i16WinkelX;     
-    /* Berechnung des Y-Winkels */    
+    if(bVorzeichenX) stWinkelData->i16WinkelX = -stWinkelData->i16WinkelX;    
+     
+    /* Berechnung des Y-Winkels */ 
     dGMessY = (stSensData->wSensY/65535.0)*3.3;
+    
     /* Auswertung des Vorzeichens */
     if(dGMessY<URefY){
-        iVorzeichenY = 1;
+        bVorzeichenY = 1;
         }
     stWinkelData->i16WinkelY = dGMessY*10000;
     dGMessY = (int)(dGMessY*1000)/1000.0; 
@@ -120,23 +139,23 @@
     if(dGMessY<=1 || dGMessY>=-1){
     stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
         }
-    if(iVorzeichenY) stWinkelData->i16WinkelY = -stWinkelData->i16WinkelY;  
+    if(bVorzeichenY) stWinkelData->i16WinkelY = -stWinkelData->i16WinkelY;  
     }
     
 /************************************************************************************
-* void void vDebugData(struct SensData *stSensData, struct WinkelData *stWinkelData)
+* void void Sensor_vDebugData(struct stSensData *stSensData, struct stWinkelData *stWinkelData)
 * Zweck:    Umrechnung der A/D-Wandler Messwerte in Spannungen zum Kalibrieren der
-            Nulllage und für Debugzwecke. Speicherung der Spannungen in WinkelData         
+            Nulllage und für Debugzwecke. Speicherung der Spannungen in stWinkelData         
 * 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
+    *stSensData:   Pointer auf eine Struktur vom Type stSensData zum Abspeichern 
+                   der X-, Y-, und Z-Daten des Sensors. 
+    *stWinkelData: Pointer auf eine Struktur vom Typ stWinkelData zum Abspeichern
                    der berechneten Spannungen in diesem Fall(!) für die X-, Y- und Z-Achse.             
 * return Parameter:
     keine
 *************************************************************************************/    
-void vDebugData(struct SensData *stSensData, struct WinkelData *stWinkelData){
-        /*Variablen*/
+void Sensor_vDebugData(struct stSensData *stSensData, struct stWinkelData *stWinkelData){
+    /*Variablen*/
     double dGMessX;
     double dGMessY;
     double dGMessZ;