
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Sensor.cpp@7:882edb5f9466, 2016-05-27 (annotated)
- Committer:
- Schreeker
- Date:
- Fri May 27 14:36:15 2016 +0000
- Revision:
- 7:882edb5f9466
- Parent:
- 6:e57f9887ad02
- Child:
- 9:38d287593320
Sensor.cpp: Einf?gen von #defines f?r X und Y Referenzwerte.; Einf?gen von Kommentare ?ber Funktionen.; Kommentare in Funktionen eingef?gt zur besseren Funktionsuebersicht.; Simon
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 | 2:cf8b98404b66 | 9 | /*Include*/ |
NilsKemmer | 2:cf8b98404b66 | 10 | #include "Sensor.h" |
NilsKemmer | 2:cf8b98404b66 | 11 | #include "mbed.h" |
NilsKemmer | 3:740ab0a19e1d | 12 | #include "math.h" |
NilsKemmer | 2:cf8b98404b66 | 13 | |
Schreeker | 7:882edb5f9466 | 14 | /*define*/ |
Schreeker | 7:882edb5f9466 | 15 | #define pi 3.141 |
Schreeker | 7:882edb5f9466 | 16 | |
Schreeker | 7:882edb5f9466 | 17 | #define URefX 1.6135 |
Schreeker | 7:882edb5f9466 | 18 | #define UDiffX 0.3255 |
Schreeker | 7:882edb5f9466 | 19 | |
Schreeker | 7:882edb5f9466 | 20 | #define URefY 1.6135 |
Schreeker | 7:882edb5f9466 | 21 | #define UDiffY 0.3255 |
Schreeker | 7:882edb5f9466 | 22 | |
Schreeker | 7:882edb5f9466 | 23 | #define URefZ 1.6135 |
Schreeker | 7:882edb5f9466 | 24 | #define UDiffZ 0.3255 |
Schreeker | 7:882edb5f9466 | 25 | |
Schreeker | 5:c0d6d490dd5b | 26 | /* Variabeln */ |
Schreeker | 7:882edb5f9466 | 27 | |
NilsKemmer | 2:cf8b98404b66 | 28 | /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/ |
Schreeker | 5:c0d6d490dd5b | 29 | struct SensData stSensData; |
Schreeker | 7:882edb5f9466 | 30 | |
NilsKemmer | 3:740ab0a19e1d | 31 | /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/ |
Schreeker | 5:c0d6d490dd5b | 32 | struct WinkelData stWinkelData; |
Schreeker | 7:882edb5f9466 | 33 | |
NilsKemmer | 2:cf8b98404b66 | 34 | /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/ |
NilsKemmer | 2:cf8b98404b66 | 35 | AnalogIn oZData(PC_2); |
NilsKemmer | 2:cf8b98404b66 | 36 | AnalogIn oYData(PC_3); |
NilsKemmer | 2:cf8b98404b66 | 37 | AnalogIn oXData(PC_4); |
NilsKemmer | 2:cf8b98404b66 | 38 | |
Schreeker | 7:882edb5f9466 | 39 | /************************************************************************************ |
Schreeker | 7:882edb5f9466 | 40 | * void vgetSensData(struct SensData *stSensData) |
Schreeker | 7:882edb5f9466 | 41 | * Zweck: Auslesen der Sensordaten (X-, Y- und Z-Daten) und speichern in |
Schreeker | 7:882edb5f9466 | 42 | Strukturen. |
Schreeker | 7:882edb5f9466 | 43 | * Parameter: |
Schreeker | 7:882edb5f9466 | 44 | *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern |
Schreeker | 7:882edb5f9466 | 45 | der X-, Y-, und Z-Daten des Sensors. |
Schreeker | 7:882edb5f9466 | 46 | * return Parameter: |
Schreeker | 7:882edb5f9466 | 47 | keine |
Schreeker | 7:882edb5f9466 | 48 | *************************************************************************************/ |
Schreeker | 5:c0d6d490dd5b | 49 | void vgetSensData(struct SensData *stSensData){ |
Schreeker | 5:c0d6d490dd5b | 50 | /* Variabeln */ |
Schreeker | 5:c0d6d490dd5b | 51 | int i=0; // Laufvariable |
Schreeker | 5:c0d6d490dd5b | 52 | double XDataRead = 0.0; // Speichervariabel für X Sampels |
Schreeker | 5:c0d6d490dd5b | 53 | double YDataRead = 0.0; // Speichervariabel für Y Sampels |
Schreeker | 5:c0d6d490dd5b | 54 | double ZDataRead = 0.0; // Speichervariabel für Z Sampels |
Schreeker | 5:c0d6d490dd5b | 55 | |
Schreeker | 5:c0d6d490dd5b | 56 | /*Auslesen der Daten, Mittelung und Speichern in Struktur*/ |
Schreeker | 5:c0d6d490dd5b | 57 | for(i=0; i<10000; i++){ |
Schreeker | 5:c0d6d490dd5b | 58 | XDataRead += oXData.read_u16(); |
NilsKemmer | 6:e57f9887ad02 | 59 | YDataRead += oYData.read_u16(); |
Schreeker | 7:882edb5f9466 | 60 | ZDataRead += oZData.read_u16(); |
Schreeker | 5:c0d6d490dd5b | 61 | } |
Schreeker | 5:c0d6d490dd5b | 62 | stSensData->wSensX = XDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 63 | stSensData->wSensY = YDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 64 | stSensData->wSensZ = ZDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 65 | |
Schreeker | 5:c0d6d490dd5b | 66 | /* Rücksetzten der Speichervariabeln*/ |
Schreeker | 5:c0d6d490dd5b | 67 | XDataRead = 0.0; |
Schreeker | 5:c0d6d490dd5b | 68 | YDataRead = 0.0; |
Schreeker | 5:c0d6d490dd5b | 69 | ZDataRead = 0.0; |
NilsKemmer | 3:740ab0a19e1d | 70 | } |
Schreeker | 7:882edb5f9466 | 71 | |
Schreeker | 7:882edb5f9466 | 72 | /************************************************************************************ |
Schreeker | 7:882edb5f9466 | 73 | * void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData) |
Schreeker | 7:882edb5f9466 | 74 | * Zweck: Umrechnen der Sensorwerte in Winkel, sowie Auswertung der Lage für |
Schreeker | 7:882edb5f9466 | 75 | LED-Ansteuerung. |
Schreeker | 7:882edb5f9466 | 76 | * Parameter: |
Schreeker | 7:882edb5f9466 | 77 | *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern |
Schreeker | 7:882edb5f9466 | 78 | der X-, Y-, und Z-Daten des Sensors. |
Schreeker | 7:882edb5f9466 | 79 | *stWinkelData: Pointer auf eine Struktur vom Typ WinkelData zum Abspeichern |
Schreeker | 7:882edb5f9466 | 80 | der berechneten Winkel für die X-, Y- und Z-Achse. |
Schreeker | 7:882edb5f9466 | 81 | * return Parameter: |
Schreeker | 7:882edb5f9466 | 82 | keine |
Schreeker | 7:882edb5f9466 | 83 | *************************************************************************************/ |
Schreeker | 5:c0d6d490dd5b | 84 | void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){ |
NilsKemmer | 3:740ab0a19e1d | 85 | /*Variablen*/ |
NilsKemmer | 3:740ab0a19e1d | 86 | double dGMessX; |
NilsKemmer | 3:740ab0a19e1d | 87 | double dGMessY; |
NilsKemmer | 3:740ab0a19e1d | 88 | double dGMessZ; |
Schreeker | 7:882edb5f9466 | 89 | /* Berechnung des Z-Winkels */ |
Schreeker | 7:882edb5f9466 | 90 | dGMessZ = (stSensData->wSensZ/65535.0)*3.3; |
Schreeker | 7:882edb5f9466 | 91 | stWinkelData->i16WinkelZ = dGMessZ*10000; |
Schreeker | 7:882edb5f9466 | 92 | /* Auswertung (> 90°) */ |
Schreeker | 7:882edb5f9466 | 93 | // Tbd |
Schreeker | 7:882edb5f9466 | 94 | /* Berechnung des X-Winkels */ |
Schreeker | 7:882edb5f9466 | 95 | dGMessX = (stSensData->wSensX/65535.0)*3.3; |
Schreeker | 7:882edb5f9466 | 96 | stWinkelData->i16WinkelX = dGMessX*10000; |
Schreeker | 7:882edb5f9466 | 97 | /* |
Schreeker | 5:c0d6d490dd5b | 98 | dGMessX = (int)(dGMessX*1000)/1000.0; |
Schreeker | 7:882edb5f9466 | 99 | dGMessX = abs(dGMessX-URefX)/(UDiffX); |
Schreeker | 4:ed779bcb8ce6 | 100 | dGMessX = (int)(dGMessX*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 101 | if(dGMessX<=1 || dGMessX>=-1){ |
Schreeker | 5:c0d6d490dd5b | 102 | stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi); |
Schreeker | 7:882edb5f9466 | 103 | }/* |
Schreeker | 7:882edb5f9466 | 104 | /* Berechnung des Y-Winkels */ |
Schreeker | 5:c0d6d490dd5b | 105 | dGMessY = (stSensData->wSensY/65535.0)*3.3; |
Schreeker | 7:882edb5f9466 | 106 | stWinkelData->i16WinkelY = dGMessY*10000; |
Schreeker | 7:882edb5f9466 | 107 | /* |
NilsKemmer | 6:e57f9887ad02 | 108 | dGMessY = (int)(dGMessY*1000)/1000.0; |
Schreeker | 7:882edb5f9466 | 109 | dGMessY = abs(dGMessY-URefY)/UDiffY; |
NilsKemmer | 6:e57f9887ad02 | 110 | dGMessY = (int)(dGMessY*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 111 | if(dGMessY<=1 || dGMessY>=-1){ |
Schreeker | 7:882edb5f9466 | 112 | stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); |
Schreeker | 7:882edb5f9466 | 113 | } */ |
NilsKemmer | 2:cf8b98404b66 | 114 | } |