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

Dependencies:   TextLCD mbed

Revision:
19:51747c0ab062
Parent:
18:b26d88b7b370
Child:
20:094cdb790dcb
--- a/LED.cpp	Thu Jul 07 09:27:57 2016 +0000
+++ b/LED.cpp	Tue Jul 12 14:49:28 2016 +0000
@@ -17,8 +17,8 @@
 /* Erzeugen eines Hystereseverhaltens bei Überkopflage und Normallage aufgrund der Schwankungen
    bei den Werten des Accelometers */
     
-#define UGrenzZUeberkopf 17602  // X oder Y > 80°
-#define UGrenzZNormal    18000  // X oder Y kleiner ungefähr 75°
+#define UGrenzZUeberkopf 17350  // X oder Y größer 81°
+#define UGrenzZNormal    17600  // X oder Y kleiner ungefähr 80°
 
 /*Konfiguriert die angegebenen Pins als pulsweitenmodulierte Ausgänge*/
 PwmOut oLEDXN(PB_15);
@@ -35,21 +35,21 @@
 * Parameter:
     wWinkelX: aktueller Winkel bezogen auf die X-Achse des Beschleunigungssensores
     wWinkelY: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores
-    wWinkelZ: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores
+    wSpannungZ: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores
 * return Parameter:
     bStateLCD:  LCD zeigt Winkel an (0) oder Textnachricht Überkopflage (1)
 *************************************************************************************/
-byte setLED(int16 wWinkelX, int16 wWinkelY, int16 wWinkelZ){
+byte setLED(int16 wWinkelX, int16 wWinkelY, int16 wSpannungZ){
     /* Variabeln */
     byte bStateLED = 0;    // Zustand des Lagesensors ( 0: Normallage 1: Überkopflage)
     byte bStateLCD = 0;    // Zustand der LCD-Anzeige ( 0: Winkelausgabe 1: Textnachricht Überkopflage)
      
     /* Auswertung der Z-Achsendaten */
-    if (wWinkelZ < UGrenzZUeberkopf){  // Überkopflage
+    if (abs(wWinkelX) > 80 || abs(wWinkelY) > 80 || wSpannungZ < UGrenzZUeberkopf){  // Überkopflage
         bStateLED = 1;
         bStateLCD = 1;
         }  
-    if (wWinkelZ > UGrenzZNormal){     // Normallage
+    if (abs(wWinkelX) < 80 && abs(wWinkelY) < 80 && wSpannungZ > UGrenzZNormal){     // Normallage
         bStateLED = 0;
         bStateLCD = 0; 
         }     
@@ -108,10 +108,10 @@
     int i = 0;
     
     /* Setzen der PWM-Periode auf 20ms */
-    oLEDXN.period_ms(20);
-    oLEDXP.period_ms(20);
-    oLEDYN.period_ms(20);
-    oLEDYP.period_ms(20);
+    oLEDXN.period_ms(10);
+    oLEDXP.period_ms(10);
+    oLEDYN.period_ms(10);
+    oLEDYP.period_ms(10);
     
     /* 4x Blinken der LED's mit 250ms Pause dazwischen*/
     while(i<8){