EMSY-Projekt / Mbed 2 deprecated EMSY-Projekt_Lagesensor

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LED.cpp Source File

LED.cpp

00001 /********************************************************************************** 
00002 * File name:    LED.cpp
00003 * Zweck:        Beinhaltet alle Funktionen zur Einstellung der LED-Helligkeit
00004                 in Abhängigkeit von den berechneten Winkeln.
00005 * Author:       Simon Rutzen, Nils Kemmer
00006 * Changes:      
00007     31.05.16    Erstellung File und Kommentar
00008     05.06.16    Funktion setLED erstellt + Kommentar zum Code 
00009     28.06.16    Funktion initLED erstellt
00010     03.07.16    Funktion setLED geschrieben
00011     06.07.16    Ueberkopflage auf +- 80° festgelegt (LED blinken)
00012     07.07.16    Funktion setLED Helligkeitsbezug auf 80° gesetzt (vorher 90°)
00013     12.07.16    Periode PWM auf 10ms gesetzt wegen Flackern der LED's 
00014     29.07.16    Anpassung an Programmierrichtlinie-Dokument und letzte endgültige
00015                 Kontrolle Simon Rutzen
00016 ***********************************************************************************/
00017 
00018 /* Zu benutzende Pins */
00019 // PWM1 - Channel 1N (PB_15), 2N (PB_14), 3N (PB_13) und 4 (PA_11)
00020 
00021 /* Includes */
00022 #include "mbed.h"
00023 #include "Sensor.h"
00024 
00025 /* Variabeln */
00026 /* Erzeugen eines Hystereseverhaltens bei Überkopflage und Normallage aufgrund der Schwankungen
00027    bei den Werten des Accelometers */
00028     
00029 #define UGrenzZUeberkopf 17350  // X oder Y größer 81°
00030 #define UGrenzZNormal    17600  // X oder Y kleiner ungefähr 80°
00031 
00032 /*Konfiguriert die angegebenen Pins als pulsweitenmodulierte Ausgänge*/
00033 PwmOut oLEDXN(PB_15);
00034 PwmOut oLEDXP(PB_14);
00035 PwmOut oLEDYN(PB_13);
00036 PwmOut oLEDYP(PA_11);
00037 
00038 /************************************************************************************
00039 * byte LED_bsetLED(struct WinkelData stWinkelData)
00040 * Zweck:    Steuerung der vier LED's auf Basis der berechneten Winkel in stWinkelData.
00041             1. Auswerten der Z-Achse, ob Überkopflage oder nicht
00042             2. Ansteurung der LED's auf Basis der berechneten Winkel in stWinkelData
00043                und Schritt 1.          
00044 * Parameter:
00045     wWinkelX:   aktueller Winkel bezogen auf die X-Achse des Beschleunigungssensores
00046     wWinkelY:   aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores
00047     wSpannungZ: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores
00048 * return bStateLCD:
00049     1 :     Normallage -> Winkelanzeige der X- und Y-Achse
00050     0 :     Ueberkopflage -> Anzeige Textnachricht, keine Winkel
00051 *************************************************************************************/
00052 byte LED_bsetLED(int16 wWinkelX, int16 wWinkelY, int16 wSpannungZ){
00053     /* Variabeln */
00054     byte bStateLED = 0;    // Zustand des Lagesensors ( 0: Normallage 1: Überkopflage)
00055     byte bStateLCD = 0;    // Zustand der LCD-Anzeige ( 0: Winkelausgabe 1: Textnachricht Überkopflage)
00056      
00057     /* Auswertung der Z-Achsendaten */
00058     if (abs(wWinkelX) > 80 || abs(wWinkelY) > 80 || wSpannungZ < UGrenzZUeberkopf){  // Überkopflage
00059         bStateLED = 1;
00060         bStateLCD = 1;
00061         }  
00062     if (abs(wWinkelX) < 80 && abs(wWinkelY) < 80 && wSpannungZ > UGrenzZNormal){     // Normallage
00063         bStateLED = 0;
00064         bStateLCD = 0; 
00065         }     
00066         
00067     /* Einstellen der LED's */
00068     switch(bStateLED){
00069         
00070         case 0:{            // Normallage, einstellen der LED-Helligkeit abhängig vom Winkel
00071             if(wWinkelX <= 0){ 
00072                 oLEDXN = abs(wWinkelX/80.0);
00073                 oLEDXP = 0;
00074                 } else {
00075                     oLEDXP = abs(wWinkelX/80.0);
00076                     oLEDXN = 0;
00077                     }
00078             if(wWinkelY <= 0){ 
00079                 oLEDYN = abs(wWinkelY/80.0);
00080                 oLEDYP = 0;
00081                 } else {
00082                     oLEDYP = abs(wWinkelY/80.0);
00083                     oLEDYN = 0;
00084                     }
00085             break;
00086             }
00087             
00088         case 1:{            // Überkopflage, LED's blinken
00089             if(oLEDXN.read()> 0){
00090                 oLEDXN = 0;
00091                 oLEDXP = 0;
00092                 oLEDYN = 0;
00093                 oLEDYP = 0;
00094                 }
00095             else{
00096                 oLEDXN = 1;
00097                 oLEDXP = 1;
00098                 oLEDYN = 1;
00099                 oLEDYP = 1;
00100                 }
00101             break;
00102             }
00103             
00104         default: break;
00105         }
00106     
00107     /* Return */
00108     return bStateLCD;
00109     }        
00110 
00111 /************************************************************************************
00112 * void LED_initLED()
00113 * Zweck:    Blinken der LED's beim Anschalten des Boards. 4x Blinken im 250ms Abstand        
00114 * Parameter:
00115     keine
00116 * return Parameter:
00117     keine
00118 *************************************************************************************/
00119 void LED_vinitLED(){
00120     /* Variabeln */
00121     int i = 0;
00122     
00123     /* Setzen der PWM-Periode auf 20ms */
00124     oLEDXN.period_ms(10);
00125     oLEDXP.period_ms(10);
00126     oLEDYN.period_ms(10);
00127     oLEDYP.period_ms(10);
00128     
00129     /* 4x Blinken der LED's mit 250ms Pause dazwischen*/
00130     while(i<8){
00131         /* Toggeln der LED's */
00132         oLEDXN = ((int)oLEDXN.read()+1) % 2; 
00133         oLEDXP = ((int)oLEDXP.read()+1) % 2;
00134         oLEDYN = ((int)oLEDYN.read()+1) % 2;
00135         oLEDYP = ((int)oLEDYP.read()+1) % 2;
00136         
00137         /* Warten */
00138         wait_ms(250);
00139         
00140         /* Zählvariabel erhöhen */
00141         ++i;
00142         }
00143     }