
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Diff: Sensor.cpp
- 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;