
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
Sensor.cpp@6:e57f9887ad02, 2016-05-25 (annotated)
- Committer:
- NilsKemmer
- Date:
- Wed May 25 09:16:13 2016 +0000
- Revision:
- 6:e57f9887ad02
- Parent:
- 5:c0d6d490dd5b
- Child:
- 7:882edb5f9466
Sensor.cpp: Erweiterung mit Y-Achse. Problem: Kalibrierung ist nicht korrekt. Wenn Platine fertig ist neu kalibrieren. Nils
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 | 5:c0d6d490dd5b | 11 | #define URef 1.6135 |
Schreeker | 5:c0d6d490dd5b | 12 | |
Schreeker | 5:c0d6d490dd5b | 13 | #define UDiff 0.3255 |
Schreeker | 5:c0d6d490dd5b | 14 | |
Schreeker | 5:c0d6d490dd5b | 15 | /* Referenzmessung bezogen auf die X-Achse*/ |
Schreeker | 5:c0d6d490dd5b | 16 | // X(-1g) = 1.288 V |
Schreeker | 5:c0d6d490dd5b | 17 | // X(1g) = 1.939 V |
Schreeker | 5:c0d6d490dd5b | 18 | // X(0g) = 1.6135 V |
Schreeker | 5:c0d6d490dd5b | 19 | // U/1g = 0.3255 V |
NilsKemmer | 3:740ab0a19e1d | 20 | |
NilsKemmer | 2:cf8b98404b66 | 21 | /*Include*/ |
NilsKemmer | 2:cf8b98404b66 | 22 | #include "Sensor.h" |
NilsKemmer | 2:cf8b98404b66 | 23 | #include "mbed.h" |
NilsKemmer | 3:740ab0a19e1d | 24 | #include "math.h" |
NilsKemmer | 2:cf8b98404b66 | 25 | |
Schreeker | 5:c0d6d490dd5b | 26 | /* Variabeln */ |
NilsKemmer | 2:cf8b98404b66 | 27 | /*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/ |
Schreeker | 5:c0d6d490dd5b | 28 | struct SensData stSensData; |
NilsKemmer | 3:740ab0a19e1d | 29 | /*Struktur zum Speichern der umgerechneten Messdaten von SensData*/ |
Schreeker | 5:c0d6d490dd5b | 30 | struct WinkelData stWinkelData; |
NilsKemmer | 2:cf8b98404b66 | 31 | |
NilsKemmer | 2:cf8b98404b66 | 32 | /*AnalogIn*/ |
NilsKemmer | 2:cf8b98404b66 | 33 | /*Konfiguriert die angegebenen Pins als analoge Eingaenge*/ |
NilsKemmer | 2:cf8b98404b66 | 34 | AnalogIn oZData(PC_2); |
NilsKemmer | 2:cf8b98404b66 | 35 | AnalogIn oYData(PC_3); |
NilsKemmer | 2:cf8b98404b66 | 36 | AnalogIn oXData(PC_4); |
NilsKemmer | 2:cf8b98404b66 | 37 | |
Schreeker | 5:c0d6d490dd5b | 38 | void vgetSensData(struct SensData *stSensData){ |
Schreeker | 5:c0d6d490dd5b | 39 | /* Variabeln */ |
Schreeker | 5:c0d6d490dd5b | 40 | int i=0; // Laufvariable |
Schreeker | 5:c0d6d490dd5b | 41 | double XDataRead = 0.0; // Speichervariabel für X Sampels |
Schreeker | 5:c0d6d490dd5b | 42 | double YDataRead = 0.0; // Speichervariabel für Y Sampels |
Schreeker | 5:c0d6d490dd5b | 43 | double ZDataRead = 0.0; // Speichervariabel für Z Sampels |
Schreeker | 5:c0d6d490dd5b | 44 | |
Schreeker | 5:c0d6d490dd5b | 45 | /*Auslesen der Daten, Mittelung und Speichern in Struktur*/ |
Schreeker | 5:c0d6d490dd5b | 46 | for(i=0; i<10000; i++){ |
Schreeker | 5:c0d6d490dd5b | 47 | XDataRead += oXData.read_u16(); |
NilsKemmer | 6:e57f9887ad02 | 48 | YDataRead += oYData.read_u16(); |
Schreeker | 5:c0d6d490dd5b | 49 | //ZDataRead += oZData.read_u16(); |
Schreeker | 5:c0d6d490dd5b | 50 | } |
Schreeker | 5:c0d6d490dd5b | 51 | stSensData->wSensX = XDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 52 | stSensData->wSensY = YDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 53 | stSensData->wSensZ = ZDataRead/10000; |
Schreeker | 5:c0d6d490dd5b | 54 | |
Schreeker | 5:c0d6d490dd5b | 55 | /* Rücksetzten der Speichervariabeln*/ |
Schreeker | 5:c0d6d490dd5b | 56 | XDataRead = 0.0; |
Schreeker | 5:c0d6d490dd5b | 57 | YDataRead = 0.0; |
Schreeker | 5:c0d6d490dd5b | 58 | ZDataRead = 0.0; |
NilsKemmer | 3:740ab0a19e1d | 59 | } |
NilsKemmer | 3:740ab0a19e1d | 60 | |
Schreeker | 5:c0d6d490dd5b | 61 | void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){ |
NilsKemmer | 3:740ab0a19e1d | 62 | /*Variablen*/ |
NilsKemmer | 3:740ab0a19e1d | 63 | double dGMessX; |
NilsKemmer | 3:740ab0a19e1d | 64 | double dGMessY; |
NilsKemmer | 3:740ab0a19e1d | 65 | double dGMessZ; |
Schreeker | 4:ed779bcb8ce6 | 66 | /* Umrechnen der Messdaten in Spannungen */ |
Schreeker | 5:c0d6d490dd5b | 67 | dGMessX = (stSensData->wSensX/65535.0)*3.3; |
NilsKemmer | 6:e57f9887ad02 | 68 | //stWinkelData->i16WinkelY = dGMessX*1000; |
Schreeker | 5:c0d6d490dd5b | 69 | dGMessX = (int)(dGMessX*1000)/1000.0; |
Schreeker | 5:c0d6d490dd5b | 70 | dGMessX = abs(dGMessX-URef)/(UDiff); |
Schreeker | 4:ed779bcb8ce6 | 71 | dGMessX = (int)(dGMessX*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 72 | if(dGMessX<=1 || dGMessX>=-1){ |
Schreeker | 5:c0d6d490dd5b | 73 | stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi); |
Schreeker | 5:c0d6d490dd5b | 74 | } |
NilsKemmer | 6:e57f9887ad02 | 75 | |
Schreeker | 5:c0d6d490dd5b | 76 | dGMessY = (stSensData->wSensY/65535.0)*3.3; |
NilsKemmer | 6:e57f9887ad02 | 77 | dGMessY = (int)(dGMessY*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 78 | dGMessY = abs(dGMessY-URef)/UDiff; |
NilsKemmer | 6:e57f9887ad02 | 79 | dGMessY = (int)(dGMessY*1000)/1000.0; |
Schreeker | 4:ed779bcb8ce6 | 80 | if(dGMessY<=1 || dGMessY>=-1){ |
Schreeker | 5:c0d6d490dd5b | 81 | stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); |
NilsKemmer | 6:e57f9887ad02 | 82 | } |
NilsKemmer | 2:cf8b98404b66 | 83 | } |