
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Diff: Sensor.cpp
- Revision:
- 7:882edb5f9466
- Parent:
- 6:e57f9887ad02
- Child:
- 9:38d287593320
--- 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