
Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.
LED.cpp@17:0b9e7a05b203, 2016-07-06 (annotated)
- Committer:
- Schreeker
- Date:
- Wed Jul 06 10:31:53 2016 +0000
- Revision:
- 17:0b9e7a05b203
- Parent:
- 16:9b20d24aae18
- Child:
- 18:b26d88b7b370
Letzte Kalibrierung der Achsen und Anpassen der Ueberkopflage ab +-80 Grad Lage der X oder Y Achse. 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 | 8:0270c3e374f7 | 6 | * Changes: keine |
Schreeker | 8:0270c3e374f7 | 7 | ***********************************************************************************/ |
Schreeker | 8:0270c3e374f7 | 8 | |
Schreeker | 8:0270c3e374f7 | 9 | /* Zu benutzende Pins */ |
Schreeker | 8:0270c3e374f7 | 10 | // PWM1 - Channel 1N (PB_15), 2N (PB_14), 3N (PB_13) und 4 (PA_11) |
Schreeker | 8:0270c3e374f7 | 11 | |
Schreeker | 10:d566927efac6 | 12 | /* Include */ |
Schreeker | 10:d566927efac6 | 13 | #include "mbed.h" |
Schreeker | 10:d566927efac6 | 14 | #include "Sensor.h" |
Schreeker | 10:d566927efac6 | 15 | |
Schreeker | 10:d566927efac6 | 16 | /* Externe Variablen */ |
Schreeker | 10:d566927efac6 | 17 | extern struct WinkelData stWinkelData; |
Schreeker | 10:d566927efac6 | 18 | |
Schreeker | 15:462c8c89fe35 | 19 | /* Variabeln */ |
Schreeker | 15:462c8c89fe35 | 20 | /* Erzeugen eines Hystereseverhaltens bei Überkopflage und Normallage aufgrund der Schwankungen |
Schreeker | 15:462c8c89fe35 | 21 | bei den Werten des Accelometers */ |
Schreeker | 15:462c8c89fe35 | 22 | |
Schreeker | 17:0b9e7a05b203 | 23 | #define UGrenzZUeberkopf 17602 // X oder Y > 80° |
Schreeker | 17:0b9e7a05b203 | 24 | #define UGrenzZNormal 18000 // X oder Y kleiner ungefähr 75° |
Schreeker | 15:462c8c89fe35 | 25 | |
Schreeker | 10:d566927efac6 | 26 | /*Konfiguriert die angegebenen Pins als pulsweitenmodulierte Ausgänge*/ |
Schreeker | 11:5861bc23022a | 27 | PwmOut oLEDXN(PB_15); |
Schreeker | 11:5861bc23022a | 28 | PwmOut oLEDXP(PB_14); |
Schreeker | 11:5861bc23022a | 29 | PwmOut oLEDYN(PB_13); |
Schreeker | 11:5861bc23022a | 30 | PwmOut oLEDYP(PA_11); |
Schreeker | 10:d566927efac6 | 31 | |
Schreeker | 10:d566927efac6 | 32 | /************************************************************************************ |
Schreeker | 10:d566927efac6 | 33 | * void setLED(struct WinkelData stWinkelData) |
Schreeker | 10:d566927efac6 | 34 | * Zweck: Steuerung der vier LED's auf Basis der berechneten Winkel in stWinkelData. |
Schreeker | 10:d566927efac6 | 35 | 1. Auswerten der Z-Achse, ob Überkopflage oder nicht |
Schreeker | 10:d566927efac6 | 36 | 2. Ansteurung der LED's auf Basis der berechneten Winkel in stWinkelData |
Schreeker | 10:d566927efac6 | 37 | und Schritt 1. |
Schreeker | 10:d566927efac6 | 38 | * Parameter: |
Schreeker | 15:462c8c89fe35 | 39 | wWinkelX: aktueller Winkel bezogen auf die X-Achse des Beschleunigungssensores |
Schreeker | 15:462c8c89fe35 | 40 | wWinkelY: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores |
Schreeker | 15:462c8c89fe35 | 41 | wWinkelZ: aktueller Winkel bezogen auf die Y-Achse des Beschleunigungssensores |
Schreeker | 10:d566927efac6 | 42 | * return Parameter: |
Schreeker | 15:462c8c89fe35 | 43 | bStateLCD: LCD zeigt Winkel an (0) oder Textnachricht Überkopflage (1) |
Schreeker | 10:d566927efac6 | 44 | *************************************************************************************/ |
Schreeker | 16:9b20d24aae18 | 45 | byte setLED(int16 wWinkelX, int16 wWinkelY, int16 wWinkelZ){ |
Schreeker | 10:d566927efac6 | 46 | /* Variabeln */ |
Schreeker | 15:462c8c89fe35 | 47 | byte bStateLED = 0; // Zustand des Lagesensors ( 0: Normallage 1: Überkopflage) |
Schreeker | 15:462c8c89fe35 | 48 | byte bStateLCD = 0; // Zustand der LCD-Anzeige ( 0: Winkelausgabe 1: Textnachricht Überkopflage) |
Schreeker | 15:462c8c89fe35 | 49 | |
Schreeker | 10:d566927efac6 | 50 | /* Auswertung der Z-Achsendaten */ |
Schreeker | 15:462c8c89fe35 | 51 | if (wWinkelZ < UGrenzZUeberkopf){ // Überkopflage |
Schreeker | 15:462c8c89fe35 | 52 | bStateLED = 1; |
Schreeker | 15:462c8c89fe35 | 53 | bStateLCD = 1; |
Schreeker | 15:462c8c89fe35 | 54 | } |
Schreeker | 15:462c8c89fe35 | 55 | if (wWinkelZ > UGrenzZNormal){ // Normallage |
Schreeker | 15:462c8c89fe35 | 56 | bStateLED = 0; |
Schreeker | 15:462c8c89fe35 | 57 | bStateLCD = 0; |
Schreeker | 15:462c8c89fe35 | 58 | } |
Schreeker | 15:462c8c89fe35 | 59 | |
Schreeker | 10:d566927efac6 | 60 | /* Einstellen der LED's */ |
Schreeker | 15:462c8c89fe35 | 61 | switch(bStateLED){ |
Schreeker | 15:462c8c89fe35 | 62 | case 0:{ // Normallage, einstellen der LED-Helligkeit abhängig vom Winkel |
Schreeker | 15:462c8c89fe35 | 63 | if(wWinkelX <= 0){ |
Schreeker | 15:462c8c89fe35 | 64 | oLEDXN = abs(wWinkelX/90.0); |
Schreeker | 15:462c8c89fe35 | 65 | oLEDXP = 0; |
Schreeker | 15:462c8c89fe35 | 66 | } else { |
Schreeker | 15:462c8c89fe35 | 67 | oLEDXP = abs(wWinkelX/90.0); |
Schreeker | 15:462c8c89fe35 | 68 | oLEDXN = 0; |
Schreeker | 15:462c8c89fe35 | 69 | } |
Schreeker | 15:462c8c89fe35 | 70 | if(wWinkelY <= 0){ |
Schreeker | 15:462c8c89fe35 | 71 | oLEDYN = abs(wWinkelY/90.0); |
Schreeker | 15:462c8c89fe35 | 72 | oLEDYP = 0; |
Schreeker | 15:462c8c89fe35 | 73 | } else { |
Schreeker | 15:462c8c89fe35 | 74 | oLEDYP = abs(wWinkelY/90.0); |
Schreeker | 15:462c8c89fe35 | 75 | oLEDYN = 0; |
Schreeker | 15:462c8c89fe35 | 76 | } |
Schreeker | 15:462c8c89fe35 | 77 | break; |
Schreeker | 15:462c8c89fe35 | 78 | } |
Schreeker | 15:462c8c89fe35 | 79 | case 1:{ // Überkopflage, LED's blinken |
Schreeker | 15:462c8c89fe35 | 80 | if(oLEDXN.read()> 0){ |
Schreeker | 15:462c8c89fe35 | 81 | oLEDXN = 0; |
Schreeker | 15:462c8c89fe35 | 82 | oLEDXP = 0; |
Schreeker | 15:462c8c89fe35 | 83 | oLEDYN = 0; |
Schreeker | 15:462c8c89fe35 | 84 | oLEDYP = 0; |
Schreeker | 15:462c8c89fe35 | 85 | } |
Schreeker | 15:462c8c89fe35 | 86 | else{ |
Schreeker | 15:462c8c89fe35 | 87 | oLEDXN = 1; |
Schreeker | 15:462c8c89fe35 | 88 | oLEDXP = 1; |
Schreeker | 15:462c8c89fe35 | 89 | oLEDYN = 1; |
Schreeker | 15:462c8c89fe35 | 90 | oLEDYP = 1; |
Schreeker | 15:462c8c89fe35 | 91 | } |
Schreeker | 15:462c8c89fe35 | 92 | break; |
Schreeker | 15:462c8c89fe35 | 93 | } |
Schreeker | 15:462c8c89fe35 | 94 | default: break; |
Schreeker | 15:462c8c89fe35 | 95 | } |
Schreeker | 15:462c8c89fe35 | 96 | |
Schreeker | 15:462c8c89fe35 | 97 | /* Return */ |
Schreeker | 15:462c8c89fe35 | 98 | return bStateLCD; |
Schreeker | 12:7c9c5a541380 | 99 | } |
Schreeker | 12:7c9c5a541380 | 100 | |
Schreeker | 12:7c9c5a541380 | 101 | /************************************************************************************ |
Schreeker | 12:7c9c5a541380 | 102 | * void void initLED() |
Schreeker | 12:7c9c5a541380 | 103 | * Zweck: Blinken der LED's beim Anschalten des Boards. 4x Blinken im 250ms Abstand |
Schreeker | 12:7c9c5a541380 | 104 | * Parameter: |
Schreeker | 12:7c9c5a541380 | 105 | keine |
Schreeker | 12:7c9c5a541380 | 106 | * return Parameter: |
Schreeker | 12:7c9c5a541380 | 107 | keine |
Schreeker | 12:7c9c5a541380 | 108 | *************************************************************************************/ |
Schreeker | 12:7c9c5a541380 | 109 | void initLED(){ |
Schreeker | 12:7c9c5a541380 | 110 | /* Variabeln */ |
Schreeker | 12:7c9c5a541380 | 111 | int i = 0; |
Schreeker | 12:7c9c5a541380 | 112 | |
Schreeker | 12:7c9c5a541380 | 113 | /* Setzen der PWM-Periode auf 20ms */ |
Schreeker | 12:7c9c5a541380 | 114 | oLEDXN.period_ms(20); |
Schreeker | 12:7c9c5a541380 | 115 | oLEDXP.period_ms(20); |
Schreeker | 12:7c9c5a541380 | 116 | oLEDYN.period_ms(20); |
Schreeker | 12:7c9c5a541380 | 117 | oLEDYP.period_ms(20); |
Schreeker | 12:7c9c5a541380 | 118 | |
Schreeker | 12:7c9c5a541380 | 119 | /* 4x Blinken der LED's mit 250ms Pause dazwischen*/ |
Schreeker | 12:7c9c5a541380 | 120 | while(i<8){ |
Schreeker | 12:7c9c5a541380 | 121 | /* Toggeln der LED's */ |
Schreeker | 12:7c9c5a541380 | 122 | oLEDXN = ((int)oLEDXN.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 123 | oLEDXP = ((int)oLEDXP.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 124 | oLEDYN = ((int)oLEDYN.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 125 | oLEDYP = ((int)oLEDYP.read()+1) % 2; |
Schreeker | 12:7c9c5a541380 | 126 | |
Schreeker | 12:7c9c5a541380 | 127 | /* Warten */ |
Schreeker | 12:7c9c5a541380 | 128 | wait_ms(250); |
Schreeker | 12:7c9c5a541380 | 129 | |
Schreeker | 12:7c9c5a541380 | 130 | /* Zählvariabel erhöhen */ |
Schreeker | 12:7c9c5a541380 | 131 | ++i; |
Schreeker | 12:7c9c5a541380 | 132 | } |
Schreeker | 12:7c9c5a541380 | 133 | } |