Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 7:882edb5f9466, committed 2016-05-27
- Comitter:
- Schreeker
- Date:
- Fri May 27 14:36:15 2016 +0000
- Parent:
- 6:e57f9887ad02
- Child:
- 8:0270c3e374f7
- Commit message:
- 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
Changed in this revision
--- a/LCD.cpp Wed May 25 09:16:13 2016 +0000
+++ b/LCD.cpp Fri May 27 14:36:15 2016 +0000
@@ -25,23 +25,12 @@
void vLCDSet(word wWinkelX, word wWinkelY){
/* Bildschirm bereinigen*/
olcd.cls();
+
/* Überschrift in erster Zeile darstellen */
olcd.locate(0,0);
olcd.printf("Lage:");
/* aktuelle Winkel darstellen in ° */
olcd.locate(0,1);
- olcd.printf("X: %i\337 Y: %i\337",wWinkelX,wWinkelY); // \337 entspricht °-Zeichen
- //olcd.printf("X: %i\337 Y: %i\337",0,0); // \337 entspricht °-Zeichen
-}
-
-void vLCDSetDebug(word wX, word wY, word wZ){
- /* Überschrift in erster Zeile darstellen */
- olcd.locate(0,0);
- olcd.printf("X:%xY:%x",wX,wY);
-
- /* aktuelle Winkel darstellen in ° */
- olcd.locate(0,1);
- //olcd.printf("X:%iY:%iZ:%i",wX,wY,wZ); // \337 entspricht °-Zeichen
- olcd.printf("Z:%x",wZ); // \337 entspricht °-Zeichen
-}
\ No newline at end of file
+ olcd.printf("X:%i\337 Y:%i\337",wWinkelX,wWinkelY); // \337 entspricht °-Zeichen
+}
\ No newline at end of file
--- a/Sensor.cpp Wed May 25 09:16:13 2016 +0000
+++ b/Sensor.cpp Fri May 27 14:36:15 2016 +0000
@@ -6,35 +6,46 @@
* Changes: keine
***********************************************************************************/
-/*define*/
-#define pi 3.141
-#define URef 1.6135
-
-#define UDiff 0.3255
-
-/* Referenzmessung bezogen auf die X-Achse*/
-// X(-1g) = 1.288 V
-// X(1g) = 1.939 V
-// X(0g) = 1.6135 V
-// U/1g = 0.3255 V
-
/*Include*/
#include "Sensor.h"
#include "mbed.h"
#include "math.h"
+/*define*/
+#define pi 3.141
+
+#define URefX 1.6135
+#define UDiffX 0.3255
+
+#define URefY 1.6135
+#define UDiffY 0.3255
+
+#define URefZ 1.6135
+#define UDiffZ 0.3255
+
/* Variabeln */
+
/*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/
struct SensData stSensData;
+
/*Struktur zum Speichern der umgerechneten Messdaten von SensData*/
struct WinkelData stWinkelData;
-
-/*AnalogIn*/
+
/*Konfiguriert die angegebenen Pins als analoge Eingaenge*/
AnalogIn oZData(PC_2);
AnalogIn oYData(PC_3);
AnalogIn oXData(PC_4);
+/************************************************************************************
+* void vgetSensData(struct SensData *stSensData)
+* Zweck: Auslesen der Sensordaten (X-, Y- und Z-Daten) und speichern in
+ Strukturen.
+* Parameter:
+ *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern
+ der X-, Y-, und Z-Daten des Sensors.
+* return Parameter:
+ keine
+*************************************************************************************/
void vgetSensData(struct SensData *stSensData){
/* Variabeln */
int i=0; // Laufvariable
@@ -46,7 +57,7 @@
for(i=0; i<10000; i++){
XDataRead += oXData.read_u16();
YDataRead += oYData.read_u16();
- //ZDataRead += oZData.read_u16();
+ ZDataRead += oZData.read_u16();
}
stSensData->wSensX = XDataRead/10000;
stSensData->wSensY = YDataRead/10000;
@@ -57,27 +68,47 @@
YDataRead = 0.0;
ZDataRead = 0.0;
}
-
+
+/************************************************************************************
+* void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData)
+* Zweck: Umrechnen der Sensorwerte in Winkel, sowie Auswertung der Lage für
+ LED-Ansteuerung.
+* Parameter:
+ *stSensData: Pointer auf eine Struktur vom Type SensData zum Abspeichern
+ der X-, Y-, und Z-Daten des Sensors.
+ *stWinkelData: Pointer auf eine Struktur vom Typ WinkelData zum Abspeichern
+ der berechneten Winkel für die X-, Y- und Z-Achse.
+* return Parameter:
+ keine
+*************************************************************************************/
void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){
/*Variablen*/
double dGMessX;
double dGMessY;
double dGMessZ;
- /* Umrechnen der Messdaten in Spannungen */
- dGMessX = (stSensData->wSensX/65535.0)*3.3;
- //stWinkelData->i16WinkelY = dGMessX*1000;
+ /* Berechnung des Z-Winkels */
+ dGMessZ = (stSensData->wSensZ/65535.0)*3.3;
+ stWinkelData->i16WinkelZ = dGMessZ*10000;
+ /* Auswertung (> 90°) */
+ // Tbd
+ /* Berechnung des X-Winkels */
+ dGMessX = (stSensData->wSensX/65535.0)*3.3;
+ stWinkelData->i16WinkelX = dGMessX*10000;
+ /*
dGMessX = (int)(dGMessX*1000)/1000.0;
- dGMessX = abs(dGMessX-URef)/(UDiff);
+ dGMessX = abs(dGMessX-URefX)/(UDiffX);
dGMessX = (int)(dGMessX*1000)/1000.0;
if(dGMessX<=1 || dGMessX>=-1){
stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
- }
-
+ }/*
+ /* Berechnung des Y-Winkels */
dGMessY = (stSensData->wSensY/65535.0)*3.3;
+ stWinkelData->i16WinkelY = dGMessY*10000;
+ /*
dGMessY = (int)(dGMessY*1000)/1000.0;
- dGMessY = abs(dGMessY-URef)/UDiff;
+ dGMessY = abs(dGMessY-URefY)/UDiffY;
dGMessY = (int)(dGMessY*1000)/1000.0;
if(dGMessY<=1 || dGMessY>=-1){
- stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
- }
+ stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
+ } */
}
\ No newline at end of file
--- a/Sensor.h Wed May 25 09:16:13 2016 +0000
+++ b/Sensor.h Fri May 27 14:36:15 2016 +0000
@@ -23,6 +23,7 @@
signed short int i16WinkelZ;
};
+/* Prototypen */
void vgetSensData(struct SensData *sSensData);
void vcalcData(struct SensData *sSensData, struct WinkelData *sWinkelData);
--- a/main.cpp Wed May 25 09:16:13 2016 +0000
+++ b/main.cpp Fri May 27 14:36:15 2016 +0000
@@ -21,11 +21,15 @@
/* Hauptprogramm */
int main(){
while(1){
+ /* Auslesen des Beschleunigungssensores */
vgetSensData(&stSensData);
+ /* Berechnung der Winkel aus Messdaten */
vcalcData(&stSensData, &stWinkelData);
- //vLCDSetDebug(stSensData.wSensX,stSensData.wSensY,stSensData.wSensZ);
+ /* Einstellen der LED's*/
+ // Tbd
+ /* Einstellen des LCD-Displays*/
vLCDSet(stWinkelData.i16WinkelX, stWinkelData.i16WinkelY);
- //wait_ms(1000);
+ wait_ms(500);
}
return 0;
}