
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:
- 4:ed779bcb8ce6
- Parent:
- 3:740ab0a19e1d
- Child:
- 5:c0d6d490dd5b
File content as of revision 4:ed779bcb8ce6:
/********************************************************************************** * 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.660 #define UDiff 0.332 /*Include*/ #include "Sensor.h" #include "mbed.h" #include "math.h" /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/ struct SensData sSensData; /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/ struct WinkelData sWinkelData; /*AnalogIn*/ /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/ AnalogIn oZData(PC_2); 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 vcalcData(struct SensData *sSensData, struct WinkelData *sWinkelData){ /*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 = (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! dGMessY = abs(dGMessY-URef)/UDiff; dGMessY = (int)(dGMessY*1000)/1000.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*/ }