
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Sensor.cpp
- Committer:
- Schreeker
- Date:
- 2016-05-24
- Revision:
- 5:c0d6d490dd5b
- Parent:
- 4:ed779bcb8ce6
- Child:
- 6:e57f9887ad02
File content as of revision 5:c0d6d490dd5b:
/********************************************************************************** * File name: Sensor.h * Zweck: Beinhaltet alle Funktionen zum Auslesen des Beschleunigungssensors bezüglich der X-, Y-, Z-Koordinaten * Author: Simon Rutzen, Nils Kemmer * 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" /* 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){ /* 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 *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; dGMessX = (int)(dGMessX*1000)/1000.0; dGMessX = abs(dGMessX-URef)/(UDiff); dGMessX = (int)(dGMessX*1000)/1000.0; if(dGMessX<=1 || dGMessX>=-1){ 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*10000)/10000.0; if(dGMessY<=1 || dGMessY>=-1){ stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); } */ }