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:
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?

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