
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
LED.cpp@20:094cdb790dcb, 2016-07-29 (annotated)
- Committer:
- Schreeker
- Date:
- Fri Jul 29 14:58:49 2016 +0000
- Revision:
- 20:094cdb790dcb
- Parent:
- 19:51747c0ab062
Anpassung an Programmierrichtlinie Dokument, sowie letzte Kontrolle und Funktionstest. Alles Ok! Codestatus endg?ltig! Simon Rutzen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Schreeker | 8:0270c3e374f7 | 1 | /********************************************************************************** |
Schreeker | 11:5861bc23022a | 2 | * File name: LED.cpp |
Schreeker | 8:0270c3e374f7 | 3 | * Zweck: Beinhaltet alle Funktionen zur Einstellung der LED-Helligkeit |
Schreeker | 8:0270c3e374f7 | 4 | in Abhängigkeit von den berechneten Winkeln. |
Schreeker | 8:0270c3e374f7 | 5 | * Author: Simon Rutzen, Nils Kemmer |
Schreeker | 20:094cdb790dcb | 6 | * Changes: |
Schreeker | 20:094cdb790dcb | 7 | 31.05.16 Erstellung File und Kommentar |
Schreeker | 20:094cdb790dcb | 8 | 05.06.16 Funktion setLED erstellt + Kommentar zum Code |
Schreeker | 20:094cdb790dcb | 9 | 28.06.16 Funktion initLED erstellt |
Schreeker | 20:094cdb790dcb | 10 | 03.07.16 Funktion setLED geschrieben |
Schreeker | 20:094cdb790dcb | 11 | 06.07.16 Ueberkopflage auf +- 80° festgelegt (LED blinken) |
Schreeker | 20:094cdb790dcb | 12 | 07.07.16 Funktion setLED Helligkeitsbezug auf 80° gesetzt (vorher 90°) |
Schreeker | 20:094cdb790dcb | 13 | 12.07.16 Periode PWM auf 10ms gesetzt wegen Flackern der LED's |
Schreeker | 20:094cdb790dcb | 14 | 29.07.16 Anpassung an Programmierrichtlinie-Dokument und letzte endgültige |
Schreeker | 20:094cdb790dcb | 15 | Kontrolle Simon Rutzen |
Schreeker | 8:0270c3e374f7 | 16 | ***********************************************************************************/ |
Schreeker | 8:0270c3e374f7 | 17 | |
Schreeker | 8:0270c3e374f7 | 18 | /* Zu benutzende Pins */ |
Schreeker | 8:0270c3e374f7 | 19 | // PWM1 - Channel 1N (PB_15), 2N (PB_14), 3N (PB_13) und 4 (PA_11) |
Schreeker | 8:0270c3e374f7 | 20 | |
Schreeker | 20:094cdb790dcb | 21 | /* Includes */ |
Schreeker | 10:d566927efac6 | 22 | #include "mbed.h" |
Schreeker | 10:d566927efac6 | 23 | #include "Sensor.h" |
Schreeker | 10:d566927efac6 | 24 | |
Schreeker | 15:462c8c89fe35 | 25 | /* Variabeln */ |
Schreeker | 15:462c8c89fe35 | 26 | /* Erzeugen eines Hystereseverhaltens bei Überkopflage und Normallage aufgrund der Schwankungen |
Schreeker | 15:462c8c89fe35 | 27 | bei den Werten des Accelometers */ |
Schreeker | 15:462c8c89fe35 | 28 | |
Schreeker | 19:51747c0ab062 | 29 | #define UGrenzZUeberkopf 17350 // X oder Y größer 81° |
Schreeker | 19:51747c0ab062 | 30 | #define UGrenzZNormal 17600 // X oder Y kleiner ungefähr 80° |
Schreeker | 15:462c8c89fe35 | 31 | |
Schreeker | 10:d566927efac6 | 32 | /*Konfiguriert die angegebenen Pins als pulsweitenmodulierte Ausgänge*/ |
Schreeker | 11:5861bc23022a | 33 | PwmOut oLEDXN(PB_15); |
Schreeker | 11:5861bc23022a | 34 | PwmOut oLEDXP(PB_14); |
Schreeker | 11:5861bc23022a | 35 | PwmOut oLEDYN(PB_13); |
Schreeker | 11:5861bc23022a | 36 | PwmOut oLEDYP(PA_11); |
Schreeker | 10:d566927efac6 | 37 | |
Schreeker | 10:d566927efac6 | 38 | /************************************************************************************ |
Schreeker | 20:094cdb790dcb | 39 | * byte LED_bsetLED(struct WinkelData stWinkelData) |
Schreeker | 10:d566927efac6 | 40 | * Zweck: Steuerung der vier LED's auf Basis der berechneten Winkel in stWinkelData. |
Schreeker | 10:d566927efac6 | 41 | 1. Auswerten der Z-Achse, ob Überkopflage oder nicht |
Schreeker | 10:d566927efac6 | 42 | 2. Ansteurung der LED's auf Basis der berechneten Winkel in stWinkelData |
Schreeker | 10:d566927efac6 | 43 | und Schritt 1. |
Schreeker | 10:d566927efac6 | 44 | * Parameter: |
Schreeker | 20:094cdb790dcb | 45 | wWinkelX: aktueller Winkel bezogen auf die X-Achse des Beschleunigungssensores |
Schreeker | 20:094cdb790dcb | 46 | wWinkelY: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores |
Schreeker | 19:51747c0ab062 | 47 | wSpannungZ: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores |
Schreeker | 20:094cdb790dcb | 48 | * return bStateLCD: |
Schreeker | 20:094cdb790dcb | 49 | 1 : Normallage -> Winkelanzeige der X- und Y-Achse |
Schreeker | 20:094cdb790dcb | 50 | 0 : Ueberkopflage -> Anzeige Textnachricht, keine Winkel |
Schreeker | 10:d566927efac6 | 51 | *************************************************************************************/ |
Schreeker | 20:094cdb790dcb | 52 | byte LED_bsetLED(int16 wWinkelX, int16 wWinkelY, int16 wSpannungZ){ |
Schreeker | 10:d566927efac6 | 53 | /* Variabeln */ |
Schreeker | 15:462c8c89fe35 | 54 | byte bStateLED = 0; // Zustand des Lagesensors ( 0: Normallage 1: Überkopflage) |
Schreeker | 15:462c8c89fe35 | 55 | byte bStateLCD = 0; // Zustand der LCD-Anzeige ( 0: Winkelausgabe 1: Textnachricht Überkopflage) |
Schreeker | 15:462c8c89fe35 | 56 | |
Schreeker | 10:d566927efac6 | 57 | /* Auswertung der Z-Achsendaten */ |
Schreeker | 19:51747c0ab062 | 58 | if (abs(wWinkelX) > 80 || abs(wWinkelY) > 80 || wSpannungZ < UGrenzZUeberkopf){ // Überkopflage |
Schreeker | 15:462c8c89fe35 | 59 | bStateLED = 1; |
Schreeker | 15:462c8c89fe35 | 60 | bStateLCD = 1; |
Schreeker | 15:462c8c89fe35 | 61 | } |
Schreeker | 19:51747c0ab062 | 62 | if (abs(wWinkelX) < 80 && abs(wWinkelY) < 80 && wSpannungZ > UGrenzZNormal){ // Normallage |
Schreeker | 15:462c8c89fe35 | 63 | bStateLED = 0; |
Schreeker | 15:462c8c89fe35 | 64 | bStateLCD = 0; |
Schreeker | 15:462c8c89fe35 | 65 | } |
Schreeker | 15:462c8c89fe35 | 66 | |
Schreeker | 10:d566927efac6 | 67 | /* Einstellen der LED's */ |
Schreeker | 15:462c8c89fe35 | 68 | switch(bStateLED){ |
Schreeker | 20:094cdb790dcb | 69 | |
Schreeker | 15:462c8c89fe35 | 70 | case 0:{ // Normallage, einstellen der LED-Helligkeit abhängig vom Winkel |
Schreeker | 15:462c8c89fe35 | 71 | if(wWinkelX <= 0){ |
Schreeker | 18:b26d88b7b370 | 72 | oLEDXN = abs(wWinkelX/80.0); |
Schreeker | 15:462c8c89fe35 | 73 | oLEDXP = 0; |
Schreeker | 15:462c8c89fe35 | 74 | } else { |
Schreeker | 18:b26d88b7b370 | 75 | oLEDXP = abs(wWinkelX/80.0); |
Schreeker | 15:462c8c89fe35 | 76 | oLEDXN = 0; |
Schreeker | 15:462c8c89fe35 | 77 | } |
Schreeker | 15:462c8c89fe35 | 78 | if(wWinkelY <= 0){ |
Schreeker | 18:b26d88b7b370 | 79 | oLEDYN = abs(wWinkelY/80.0); |
Schreeker | 15:462c8c89fe35 | 80 | oLEDYP = 0; |
Schreeker | 15:462c8c89fe35 | 81 | } else { |
Schreeker | 18:b26d88b7b370 | 82 | oLEDYP = abs(wWinkelY/80.0); |
Schreeker | 15:462c8c89fe35 | 83 | oLEDYN = 0; |
Schreeker | 15:462c8c89fe35 | 84 | } |
Schreeker | 15:462c8c89fe35 | 85 | break; |
Schreeker | 15:462c8c89fe35 | 86 | } |
Schreeker | 20:094cdb790dcb | 87 | |
Schreeker | 15:462c8c89fe35 | 88 | case 1:{ // Überkopflage, LED's blinken |
Schreeker | 15:462c8c89fe35 | 89 | if(oLEDXN.read()> 0){ |
Schreeker | 15:462c8c89fe35 | 90 | oLEDXN = 0; |
Schreeker | 15:462c8c89fe35 | 91 | oLEDXP = 0; |
Schreeker | 15:462c8c89fe35 | 92 | oLEDYN = 0; |
Schreeker | 15:462c8c89fe35 | 93 | oLEDYP = 0; |
Schreeker | 15:462c8c89fe35 | 94 | } |
Schreeker | 15:462c8c89fe35 | 95 | else{ |
Schreeker | 15:462c8c89fe35 | 96 | oLEDXN = 1; |
Schreeker | 15:462c8c89fe35 | 97 | oLEDXP = 1; |
Schreeker | 15:462c8c89fe35 | 98 | oLEDYN = 1; |
Schreeker | 15:462c8c89fe35 | 99 | oLEDYP = 1; |
Schreeker | 15:462c8c89fe35 | 100 | } |
Schreeker | 15:462c8c89fe35 | 101 | break; |
Schreeker | 15:462c8c89fe35 | 102 | } |
Schreeker | 20:094cdb790dcb | 103 | |
Schreeker | 15:462c8c89fe35 | 104 | default: break; |
Schreeker | 15:462c8c89fe35 | 105 | } |
Schreeker | 15:462c8c89fe35 | 106 | |
Schreeker | 15:462c8c89fe35 | 107 | /* Return */ |
Schreeker | 15:462c8c89fe35 | 108 | return bStateLCD; |
Schreeker | 12:7c9c5a541380 | 109 | } |
Schreeker | 12:7c9c5a541380 | 110 | |
Schreeker | 12:7c9c5a541380 | 111 | /************************************************************************************ |
Schreeker | 20:094cdb790dcb | 112 | * void LED_initLED() |
Schreeker | 12:7c9c5a541380 | 113 | * Zweck: Blinken der LED's beim Anschalten des Boards. 4x Blinken im 250ms Abstand |
Schreeker | 12:7c9c5a541380 | 114 | * Parameter: |
Schreeker | 12:7c9c5a541380 | 115 | keine |
Schreeker | 12:7c9c5a541380 | 116 | * return Parameter: |
Schreeker | 12:7c9c5a541380 | 117 | keine |
Schreeker | 12:7c9c5a541380 | 118 | *************************************************************************************/ |
Schreeker | 20:094cdb790dcb | 119 | void LED_vinitLED(){ |
Schreeker | 12:7c9c5a541380 | 120 | /* Variabeln */ |
Schreeker | 12:7c9c5a541380 | 121 | int i = 0; |
Schreeker | 12:7c9c5a541380 | 122 | |
Schreeker | 12:7c9c5a541380 | 123 | /* Setzen der PWM-Periode auf 20ms */ |
Schreeker | 19:51747c0ab062 | 124 | oLEDXN.period_ms(10); |
Schreeker | 19:51747c0ab062 | 125 | oLEDXP.period_ms(10); |
Schreeker | 19:51747c0ab062 | 126 | oLEDYN.period_ms(10); |
Schreeker | 19:51747c0ab062 | 127 | oLEDYP.period_ms(10); |
Schreeker | 12:7c9c5a541380 | 128 | |
Schreeker | 12:7c9c5a541380 | 129 | /* 4x Blinken der LED's mit 250ms Pause dazwischen*/ |
Schreeker | 12:7c9c5a541380 | 130 | while(i<8){ |
Schreeker | 12:7c9c5a541380 | 131 | /* Toggeln der LED's */ |
Schreeker | 12:7c9c5a541380 | 132 | oLEDXN = ((int)oLEDXN.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 133 | oLEDXP = ((int)oLEDXP.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 134 | oLEDYN = ((int)oLEDYN.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 135 | oLEDYP = ((int)oLEDYP.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 136 | |
Schreeker | 12:7c9c5a541380 | 137 | /* Warten */ |
Schreeker | 12:7c9c5a541380 | 138 | wait_ms(250); |
Schreeker | 12:7c9c5a541380 | 139 | |
Schreeker | 12:7c9c5a541380 | 140 | /* Zählvariabel erhöhen */ |
Schreeker | 12:7c9c5a541380 | 141 | ++i; |
Schreeker | 12:7c9c5a541380 | 142 | } |
Schreeker | 12:7c9c5a541380 | 143 | } |