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