Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Sensor.cpp@4:ed779bcb8ce6, 2016-05-24 (annotated)
- Committer:
- Schreeker
- Date:
- Tue May 24 13:43:39 2016 +0000
- Revision:
- 4:ed779bcb8ce6
- Parent:
- 3:740ab0a19e1d
- Child:
- 5:c0d6d490dd5b
vCalcData erweitert mit Winkelberechnung. Ungenauigkeit in den Grenzen bei 90?-Neigung + Nachkommastellen zu ungenau -> Ueberfuehren in Integerrechnungen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NilsKemmer | 2:cf8b98404b66 | 1 | /********************************************************************************** |
NilsKemmer | 2:cf8b98404b66 | 2 | * File name: Sensor.h |
NilsKemmer | 2:cf8b98404b66 | 3 | * Zweck: Beinhaltet alle Funktionen zum Auslesen des Beschleunigungssensors |
NilsKemmer | 2:cf8b98404b66 | 4 | bezüglich der X-, Y-, Z-Koordinaten |
NilsKemmer | 2:cf8b98404b66 | 5 | * Author: Simon Rutzen, Nils Kemmer |
NilsKemmer | 2:cf8b98404b66 | 6 | * Changes: keine |
NilsKemmer | 2:cf8b98404b66 | 7 | ***********************************************************************************/ |
NilsKemmer | 2:cf8b98404b66 | 8 | |
NilsKemmer | 3:740ab0a19e1d | 9 | /*define*/ |
Schreeker | 4:ed779bcb8ce6 | 10 | #define pi 3.141 |
Schreeker | 4:ed779bcb8ce6 | 11 | #define URef 1.660 |
Schreeker | 4:ed779bcb8ce6 | 12 | #define UDiff 0.332 |
NilsKemmer | 3:740ab0a19e1d | 13 | |
NilsKemmer | 2:cf8b98404b66 | 14 | /*Include*/ |
NilsKemmer | 2:cf8b98404b66 | 15 | #include "Sensor.h" |
NilsKemmer | 2:cf8b98404b66 | 16 | #include "mbed.h" |
NilsKemmer | 3:740ab0a19e1d | 17 | #include "math.h" |
NilsKemmer | 2:cf8b98404b66 | 18 | |
NilsKemmer | 2:cf8b98404b66 | 19 | /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/ |
NilsKemmer | 2:cf8b98404b66 | 20 | struct SensData sSensData; |
NilsKemmer | 3:740ab0a19e1d | 21 | /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/ |
NilsKemmer | 3:740ab0a19e1d | 22 | struct WinkelData sWinkelData; |
NilsKemmer | 2:cf8b98404b66 | 23 | |
NilsKemmer | 2:cf8b98404b66 | 24 | /*AnalogIn*/ |
NilsKemmer | 2:cf8b98404b66 | 25 | /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/ |
NilsKemmer | 2:cf8b98404b66 | 26 | AnalogIn oZData(PC_2); |
NilsKemmer | 2:cf8b98404b66 | 27 | AnalogIn oYData(PC_3); |
NilsKemmer | 2:cf8b98404b66 | 28 | AnalogIn oXData(PC_4); |
NilsKemmer | 2:cf8b98404b66 | 29 | |
NilsKemmer | 2:cf8b98404b66 | 30 | void vgetSensData(struct SensData *sSensData){ |
NilsKemmer | 2:cf8b98404b66 | 31 | /*Auslesen der Daten und Speichern in Struktur*/ |
NilsKemmer | 2:cf8b98404b66 | 32 | sSensData->wSensX=oXData.read_u16(); |
NilsKemmer | 2:cf8b98404b66 | 33 | sSensData->wSensY=oYData.read_u16(); |
NilsKemmer | 2:cf8b98404b66 | 34 | sSensData->wSensZ=oZData.read_u16(); |
NilsKemmer | 3:740ab0a19e1d | 35 | } |
NilsKemmer | 3:740ab0a19e1d | 36 | |
NilsKemmer | 3:740ab0a19e1d | 37 | void vcalcData(struct SensData *sSensData, struct WinkelData *sWinkelData){ |
NilsKemmer | 3:740ab0a19e1d | 38 | /*Variablen*/ |
NilsKemmer | 3:740ab0a19e1d | 39 | double dGMessX; |
NilsKemmer | 3:740ab0a19e1d | 40 | double dGMessY; |
NilsKemmer | 3:740ab0a19e1d | 41 | double dGMessZ; |
Schreeker | 4:ed779bcb8ce6 | 42 | /* Umrechnen der Messdaten in Spannungen */ |
Schreeker | 4:ed779bcb8ce6 | 43 | dGMessX = (sSensData->wSensX/65535.0)*3.3; |
Schreeker | 4:ed779bcb8ce6 | 44 | dGMessX = (int)(dGMessX*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen! |
Schreeker | 4:ed779bcb8ce6 | 45 | dGMessX = abs(dGMessX-URef)/UDiff; |
Schreeker | 4:ed779bcb8ce6 | 46 | dGMessX = (int)(dGMessX*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 47 | if(dGMessX<=1 || dGMessX>=-1){ |
Schreeker | 4:ed779bcb8ce6 | 48 | sWinkelData->i16WinkelX = asin(dGMessX)*(180/pi); |
Schreeker | 4:ed779bcb8ce6 | 49 | } |
Schreeker | 4:ed779bcb8ce6 | 50 | |
Schreeker | 4:ed779bcb8ce6 | 51 | dGMessY = (sSensData->wSensY/65535.0)*3.3; |
Schreeker | 4:ed779bcb8ce6 | 52 | dGMessY = (int)(dGMessY*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen! |
Schreeker | 4:ed779bcb8ce6 | 53 | dGMessY = abs(dGMessY-URef)/UDiff; |
Schreeker | 4:ed779bcb8ce6 | 54 | dGMessY = (int)(dGMessY*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 55 | if(dGMessY<=1 || dGMessY>=-1){ |
Schreeker | 4:ed779bcb8ce6 | 56 | sWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); |
Schreeker | 4:ed779bcb8ce6 | 57 | } |
Schreeker | 4:ed779bcb8ce6 | 58 | |
Schreeker | 4:ed779bcb8ce6 | 59 | /* Umrechnen der Spannungen in g-Kräfte*/ |
Schreeker | 4:ed779bcb8ce6 | 60 | /* Umrechnen der g-Kräfte in Winkel*/ |
NilsKemmer | 2:cf8b98404b66 | 61 | } |