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

Dependencies:   TextLCD mbed

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?

UserRevisionLine numberNew 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 }