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

Dependencies:   TextLCD mbed

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?

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