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.
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 }
Generated on Mon Jul 18 2022 08:31:20 by
1.7.2