Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.

Dependencies:   TextLCD mbed

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?

UserRevisionLine numberNew 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 }