![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Blinker
Dependencies: TextLCD mbed MMA8451Q
Blinker.cpp@18:8876780cb268, 2014-07-01 (annotated)
- Committer:
- Berrng
- Date:
- Tue Jul 01 08:00:59 2014 +0000
- Revision:
- 18:8876780cb268
- Parent:
- 17:c96c9af96dbb
Arsch g; ettet!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Daniel90 | 3:05c8449bc489 | 1 | //Multifunktionsblinker |
Daniel90 | 3:05c8449bc489 | 2 | //Hardware: Freescale FRDM KL25Z & SaintSmart LCD Keypad Shield |
Daniel90 | 3:05c8449bc489 | 3 | //Copyright: Andre Ehwein, Marcel Berrang, Daniel Knopp |
Daniel90 | 3:05c8449bc489 | 4 | |
Berrng | 17:c96c9af96dbb | 5 | #include "mbed.h" //Allgemeine Bib. für mbed |
Berrng | 17:c96c9af96dbb | 6 | #include "TextLCD.h" //Bib. für den LCD Shield |
Daniel90 | 4:a0a518132c23 | 7 | |
Berrng | 17:c96c9af96dbb | 8 | DigitalOut Blinker_L_Led(PTD2); // Digitaler Ausgang für den linken Blinker |
Berrng | 17:c96c9af96dbb | 9 | DigitalOut Blinker_R_Led(PTD3); // Digitaler Ausgang für den rechten Blinker |
Berrng | 17:c96c9af96dbb | 10 | DigitalOut Licht(PTA12); // Digitaler Ausgang für das Licht |
Berrng | 11:f3de201aace6 | 11 | |
Berrng | 17:c96c9af96dbb | 12 | AnalogIn KEYS(PTB0); //AnalogIn um die Spannung zu bestimmen und die Buttons zu erkennen |
Berrng | 17:c96c9af96dbb | 13 | TextLCD lcd(PTA13, PTD5, PTA4, PTA5, PTC8, PTC9, TextLCD::LCD16x2); //Konfiguration des LCD-Keypad-Shields mit Pins: rs, e, d4, d5, d6, d7 |
Berrng | 10:31d4d8104813 | 14 | |
Berrng | 17:c96c9af96dbb | 15 | //Definition der Tasten des Keypad Shields |
Berrng | 11:f3de201aace6 | 16 | #define RIGHT_KEY 0 |
Berrng | 10:31d4d8104813 | 17 | #define UP_KEY 1 |
Berrng | 10:31d4d8104813 | 18 | #define DOWN_KEY 2 |
Berrng | 10:31d4d8104813 | 19 | #define LEFT_KEY 3 |
Berrng | 11:f3de201aace6 | 20 | #define SELECT_KEY 4 |
Berrng | 17:c96c9af96dbb | 21 | #define NO_KEY 5 |
Berrng | 7:c1d05f2830fb | 22 | |
Berrng | 17:c96c9af96dbb | 23 | //Variablendefinition |
Berrng | 17:c96c9af96dbb | 24 | int read_KEY(); //Eingang Keypad |
Berrng | 17:c96c9af96dbb | 25 | int buttonState; |
Berrng | 17:c96c9af96dbb | 26 | float z = 0.35; //Blinkrythmus |
Berrng | 17:c96c9af96dbb | 27 | float wt=0.4; //Wartezeit vor Tastenerfassung (wichtig) |
Berrng | 17:c96c9af96dbb | 28 | |
Berrng | 10:31d4d8104813 | 29 | |
Berrng | 17:c96c9af96dbb | 30 | //Definition der Unterprogramme |
Berrng | 10:31d4d8104813 | 31 | void BlinkerL(); |
Berrng | 16:3775d1fa074b | 32 | void BlinkerR(); |
Berrng | 16:3775d1fa074b | 33 | void BlinkerW(); |
Berrng | 17:c96c9af96dbb | 34 | void Programmwahl(); |
Berrng | 11:f3de201aace6 | 35 | |
Berrng | 17:c96c9af96dbb | 36 | //Hauptprogramm |
Berrng | 7:c1d05f2830fb | 37 | int main() |
Berrng | 17:c96c9af96dbb | 38 | { |
Berrng | 17:c96c9af96dbb | 39 | lcd.cls(); //LCD rücksetzen |
Berrng | 17:c96c9af96dbb | 40 | lcd.locate(3,0); //Posiiton der Anzeige festlegen |
Berrng | 17:c96c9af96dbb | 41 | lcd.printf("Welcome To"); //Textausgabe auf LCD |
Berrng | 10:31d4d8104813 | 42 | lcd.locate(4,1); |
Berrng | 10:31d4d8104813 | 43 | lcd.printf("smartBIG"); |
Berrng | 17:c96c9af96dbb | 44 | char h; //Schleife für Willkomenslicht |
Berrng | 16:3775d1fa074b | 45 | for (h=2; h>=1; h--) |
Berrng | 16:3775d1fa074b | 46 | { |
Berrng | 16:3775d1fa074b | 47 | Licht=0; |
Berrng | 16:3775d1fa074b | 48 | wait(0.2); |
Berrng | 16:3775d1fa074b | 49 | Licht=1; |
Berrng | 16:3775d1fa074b | 50 | wait(0.2); |
Berrng | 16:3775d1fa074b | 51 | } |
Berrng | 16:3775d1fa074b | 52 | wait(1); |
Berrng | 16:3775d1fa074b | 53 | |
Berrng | 17:c96c9af96dbb | 54 | Programmwahl(); //Aufruf der Programmauswahl |
Berrng | 10:31d4d8104813 | 55 | } |
Berrng | 10:31d4d8104813 | 56 | |
Berrng | 17:c96c9af96dbb | 57 | //Unterprogramm Programmwahl |
Berrng | 10:31d4d8104813 | 58 | void Programmwahl() |
Berrng | 10:31d4d8104813 | 59 | { |
Berrng | 17:c96c9af96dbb | 60 | Blinker_L_Led = 0; //Blinker zurücksetzen |
Berrng | 16:3775d1fa074b | 61 | Blinker_R_Led = 0; |
Berrng | 10:31d4d8104813 | 62 | lcd.cls(); |
Berrng | 10:31d4d8104813 | 63 | lcd.locate(4,1); |
Berrng | 11:f3de201aace6 | 64 | lcd.printf("smartBIG"); |
Berrng | 17:c96c9af96dbb | 65 | while(1) //Schleife zur Programmwahlabfrage |
Berrng | 10:31d4d8104813 | 66 | { |
Berrng | 17:c96c9af96dbb | 67 | wait(wt); |
Berrng | 17:c96c9af96dbb | 68 | buttonState = read_KEY(); //Einlesen des betätigten Buttons |
Berrng | 17:c96c9af96dbb | 69 | if (buttonState == LEFT_KEY) //Linker Button |
Berrng | 10:31d4d8104813 | 70 | { |
Berrng | 10:31d4d8104813 | 71 | BlinkerL(); |
Berrng | 10:31d4d8104813 | 72 | } |
Berrng | 17:c96c9af96dbb | 73 | if (buttonState == RIGHT_KEY) //Rechter Button |
Berrng | 16:3775d1fa074b | 74 | { |
Berrng | 16:3775d1fa074b | 75 | BlinkerR(); |
Berrng | 16:3775d1fa074b | 76 | } |
Berrng | 17:c96c9af96dbb | 77 | if (buttonState == UP_KEY) //Oben Button |
Berrng | 16:3775d1fa074b | 78 | { |
Berrng | 16:3775d1fa074b | 79 | BlinkerW(); |
Berrng | 16:3775d1fa074b | 80 | } |
Berrng | 10:31d4d8104813 | 81 | } |
Berrng | 10:31d4d8104813 | 82 | } |
Berrng | 10:31d4d8104813 | 83 | |
Berrng | 11:f3de201aace6 | 84 | // Programm für die Ansteuerung der linken Blinker |
Berrng | 10:31d4d8104813 | 85 | void BlinkerL() |
Berrng | 10:31d4d8104813 | 86 | { |
Berrng | 17:c96c9af96dbb | 87 | buttonState = NO_KEY; //Zurücksetzen des Button-Status aus Programmauswahl |
Berrng | 10:31d4d8104813 | 88 | lcd.cls(); |
Berrng | 13:243a94718e51 | 89 | lcd.locate(1,1); |
Berrng | 13:243a94718e51 | 90 | lcd.printf("Blinker Links"); |
Berrng | 10:31d4d8104813 | 91 | wait(z); |
Berrng | 11:f3de201aace6 | 92 | lcd.locate(0,0); |
Berrng | 10:31d4d8104813 | 93 | lcd.printf("<--"); |
Daniel90 | 14:38a4ae533a01 | 94 | Blinker_L_Led = 1; |
Berrng | 16:3775d1fa074b | 95 | wait(wt); |
Berrng | 11:f3de201aace6 | 96 | buttonState = read_KEY(); |
Berrng | 11:f3de201aace6 | 97 | |
Berrng | 17:c96c9af96dbb | 98 | if (buttonState == LEFT_KEY) //Einstieg Dauerblinker links |
Berrng | 11:f3de201aace6 | 99 | { while(1) |
Berrng | 10:31d4d8104813 | 100 | { |
Daniel90 | 14:38a4ae533a01 | 101 | Blinker_L_Led = 0; |
Berrng | 11:f3de201aace6 | 102 | buttonState = NO_KEY; |
Berrng | 11:f3de201aace6 | 103 | lcd.cls(); |
Berrng | 13:243a94718e51 | 104 | lcd.locate(2,1); |
Berrng | 13:243a94718e51 | 105 | lcd.printf("Dauerblinker"); |
Berrng | 11:f3de201aace6 | 106 | wait(z); |
Berrng | 11:f3de201aace6 | 107 | lcd.locate(0,0); |
Berrng | 11:f3de201aace6 | 108 | lcd.printf("<--"); |
Daniel90 | 14:38a4ae533a01 | 109 | Blinker_L_Led = 1; |
Berrng | 16:3775d1fa074b | 110 | wait(wt); |
Berrng | 11:f3de201aace6 | 111 | buttonState = read_KEY(); |
Klaus89 | 12:601b595e68a0 | 112 | |
Berrng | 17:c96c9af96dbb | 113 | if (buttonState == DOWN_KEY) //Abbruchbedingung Dauerblinker links |
Daniel90 | 14:38a4ae533a01 | 114 | { |
Berrng | 17:c96c9af96dbb | 115 | Programmwahl(); //Zurück zur Programmwahl |
Daniel90 | 14:38a4ae533a01 | 116 | } |
Berrng | 17:c96c9af96dbb | 117 | if (buttonState == UP_KEY) //Einstieg Warnblinker |
Berrng | 16:3775d1fa074b | 118 | { BlinkerW();} |
Berrng | 18:8876780cb268 | 119 | if (buttonState == RIGHT_KEY) //Einstieg Blinker Rechts |
Berrng | 18:8876780cb268 | 120 | { |
Berrng | 18:8876780cb268 | 121 | Blinker_L_Led = 0; |
Berrng | 18:8876780cb268 | 122 | BlinkerR();} |
Berrng | 11:f3de201aace6 | 123 | } |
Berrng | 11:f3de201aace6 | 124 | } |
Berrng | 17:c96c9af96dbb | 125 | else //Einstieg Komfortblinker links |
Berrng | 10:31d4d8104813 | 126 | { |
Berrng | 17:c96c9af96dbb | 127 | char x = 3; //x Zählvariable |
Berrng | 11:f3de201aace6 | 128 | for (x=3; x>=1; x--) |
Berrng | 10:31d4d8104813 | 129 | { |
Daniel90 | 14:38a4ae533a01 | 130 | Blinker_L_Led = 0; |
Berrng | 10:31d4d8104813 | 131 | lcd.cls(); |
Berrng | 13:243a94718e51 | 132 | lcd.locate(1,1); |
Berrng | 13:243a94718e51 | 133 | lcd.printf("Komfortblinker"); |
Berrng | 10:31d4d8104813 | 134 | wait(z); |
Berrng | 10:31d4d8104813 | 135 | lcd.locate(15,0); |
Berrng | 17:c96c9af96dbb | 136 | lcd.printf("%d",x); //Ausgabe der Var. x auf dem LCD |
Berrng | 11:f3de201aace6 | 137 | lcd.locate(0,0); |
Berrng | 10:31d4d8104813 | 138 | lcd.printf("<--"); |
Daniel90 | 14:38a4ae533a01 | 139 | Blinker_L_Led = 1; |
Berrng | 10:31d4d8104813 | 140 | wait(z); |
Berrng | 10:31d4d8104813 | 141 | } |
Berrng | 10:31d4d8104813 | 142 | } |
Berrng | 17:c96c9af96dbb | 143 | Programmwahl(); |
Berrng | 17:c96c9af96dbb | 144 | } |
Berrng | 16:3775d1fa074b | 145 | |
Berrng | 16:3775d1fa074b | 146 | |
Berrng | 17:c96c9af96dbb | 147 | // Programm für die Ansteuerung der rechten Blinker |
Berrng | 16:3775d1fa074b | 148 | void BlinkerR() |
Berrng | 16:3775d1fa074b | 149 | { |
Berrng | 16:3775d1fa074b | 150 | buttonState = NO_KEY; |
Berrng | 16:3775d1fa074b | 151 | lcd.cls(); |
Berrng | 16:3775d1fa074b | 152 | lcd.locate(1,1); |
Berrng | 16:3775d1fa074b | 153 | lcd.printf("Blinker Rechts"); |
Berrng | 16:3775d1fa074b | 154 | wait(z); |
Berrng | 16:3775d1fa074b | 155 | lcd.locate(13,0); |
Berrng | 16:3775d1fa074b | 156 | lcd.printf("-->"); |
Berrng | 16:3775d1fa074b | 157 | Blinker_R_Led = 1; |
Berrng | 16:3775d1fa074b | 158 | wait(wt); |
Berrng | 16:3775d1fa074b | 159 | buttonState = read_KEY(); |
Berrng | 10:31d4d8104813 | 160 | |
Berrng | 17:c96c9af96dbb | 161 | if (buttonState == RIGHT_KEY) //Einstieg Dauerblinker rechts |
Berrng | 16:3775d1fa074b | 162 | { while(1) |
Berrng | 16:3775d1fa074b | 163 | { |
Berrng | 16:3775d1fa074b | 164 | Blinker_R_Led = 0; |
Berrng | 16:3775d1fa074b | 165 | buttonState = NO_KEY; |
Berrng | 16:3775d1fa074b | 166 | lcd.cls(); |
Berrng | 16:3775d1fa074b | 167 | lcd.locate(2,1); |
Berrng | 16:3775d1fa074b | 168 | lcd.printf("Dauerblinker"); |
Berrng | 16:3775d1fa074b | 169 | wait(z); |
Berrng | 16:3775d1fa074b | 170 | lcd.locate(13,0); |
Berrng | 16:3775d1fa074b | 171 | lcd.printf("-->"); |
Berrng | 16:3775d1fa074b | 172 | Blinker_R_Led = 1; |
Berrng | 16:3775d1fa074b | 173 | wait(wt); |
Berrng | 16:3775d1fa074b | 174 | buttonState = read_KEY(); |
Berrng | 16:3775d1fa074b | 175 | |
Berrng | 17:c96c9af96dbb | 176 | if (buttonState == DOWN_KEY) //Abbruchbedingung Dauerblinker rechts |
Berrng | 16:3775d1fa074b | 177 | { |
Berrng | 16:3775d1fa074b | 178 | Programmwahl(); |
Berrng | 16:3775d1fa074b | 179 | } |
Berrng | 17:c96c9af96dbb | 180 | if (buttonState == UP_KEY) //Einstieg Warnblinker |
Berrng | 16:3775d1fa074b | 181 | { BlinkerW();} |
Berrng | 18:8876780cb268 | 182 | if (buttonState == LEFT_KEY) //Einstieg Blinker Links |
Berrng | 18:8876780cb268 | 183 | { |
Berrng | 18:8876780cb268 | 184 | Blinker_R_Led = 0; |
Berrng | 18:8876780cb268 | 185 | BlinkerL();} |
Berrng | 16:3775d1fa074b | 186 | } |
Berrng | 16:3775d1fa074b | 187 | } |
Berrng | 17:c96c9af96dbb | 188 | else //Einstieg Komfortblinker rechts |
Berrng | 16:3775d1fa074b | 189 | { |
Berrng | 16:3775d1fa074b | 190 | char x = 3; |
Berrng | 16:3775d1fa074b | 191 | for (x=3; x>=1; x--) |
Berrng | 16:3775d1fa074b | 192 | { |
Berrng | 16:3775d1fa074b | 193 | Blinker_R_Led = 0; |
Berrng | 16:3775d1fa074b | 194 | lcd.cls(); |
Berrng | 16:3775d1fa074b | 195 | lcd.locate(1,1); |
Berrng | 16:3775d1fa074b | 196 | lcd.printf("Komfortblinker"); |
Berrng | 16:3775d1fa074b | 197 | wait(z); |
Berrng | 16:3775d1fa074b | 198 | lcd.locate(0,0); |
Berrng | 16:3775d1fa074b | 199 | lcd.printf("%d",x); |
Berrng | 16:3775d1fa074b | 200 | lcd.locate(13,0); |
Berrng | 16:3775d1fa074b | 201 | lcd.printf("-->"); |
Berrng | 16:3775d1fa074b | 202 | Blinker_R_Led = 1; |
Berrng | 16:3775d1fa074b | 203 | wait(z); |
Berrng | 16:3775d1fa074b | 204 | } |
Berrng | 16:3775d1fa074b | 205 | } |
Berrng | 17:c96c9af96dbb | 206 | Programmwahl(); //Zurück zur Programmwahl |
Berrng | 16:3775d1fa074b | 207 | } |
Berrng | 16:3775d1fa074b | 208 | |
Berrng | 16:3775d1fa074b | 209 | // Programm für die Ansteuerung der Warnblinkroutine |
Berrng | 16:3775d1fa074b | 210 | void BlinkerW() |
Berrng | 16:3775d1fa074b | 211 | { |
Berrng | 17:c96c9af96dbb | 212 | while(1) |
Berrng | 17:c96c9af96dbb | 213 | { |
Berrng | 16:3775d1fa074b | 214 | buttonState = NO_KEY; |
Berrng | 16:3775d1fa074b | 215 | lcd.cls(); |
Berrng | 16:3775d1fa074b | 216 | lcd.locate(2,1); |
Berrng | 16:3775d1fa074b | 217 | lcd.printf("Warnblinker!"); |
Berrng | 16:3775d1fa074b | 218 | Blinker_L_Led = 0; |
Berrng | 16:3775d1fa074b | 219 | Blinker_R_Led = 0; |
Berrng | 16:3775d1fa074b | 220 | wait(z); |
Berrng | 16:3775d1fa074b | 221 | lcd.locate(13,0); |
Berrng | 16:3775d1fa074b | 222 | lcd.printf("-->"); |
Berrng | 16:3775d1fa074b | 223 | lcd.locate(0,0); |
Berrng | 16:3775d1fa074b | 224 | lcd.printf("<--"); |
Berrng | 16:3775d1fa074b | 225 | Blinker_L_Led = 1; |
Berrng | 16:3775d1fa074b | 226 | Blinker_R_Led = 1; |
Berrng | 17:c96c9af96dbb | 227 | |
Berrng | 16:3775d1fa074b | 228 | wait(wt); |
Berrng | 16:3775d1fa074b | 229 | buttonState = read_KEY(); |
Berrng | 17:c96c9af96dbb | 230 | if (buttonState==DOWN_KEY || buttonState==UP_KEY) //Doppelte Abschaltbedingung |
Berrng | 16:3775d1fa074b | 231 | { |
Berrng | 16:3775d1fa074b | 232 | Programmwahl(); |
Berrng | 16:3775d1fa074b | 233 | } |
Berrng | 17:c96c9af96dbb | 234 | } |
Berrng | 16:3775d1fa074b | 235 | } |
Berrng | 10:31d4d8104813 | 236 | |
Berrng | 17:c96c9af96dbb | 237 | //Routine zum Auslesem der betätigten Taste |
Berrng | 17:c96c9af96dbb | 238 | int read_KEY() |
Berrng | 10:31d4d8104813 | 239 | { |
Berrng | 10:31d4d8104813 | 240 | int adc_key_in = 0; |
Berrng | 17:c96c9af96dbb | 241 | adc_key_in = KEYS.read_u16 (); //Einlesen der aktuell anliegenden Spannung |
Berrng | 17:c96c9af96dbb | 242 | |
Berrng | 17:c96c9af96dbb | 243 | if (adc_key_in > 65000) {return NO_KEY;} //Zuordnung der ermittelten Spannungswerte in Intervallen (aufgrund Schwankungen) |
Berrng | 17:c96c9af96dbb | 244 | if (adc_key_in < 300) {return RIGHT_KEY;} |
Berrng | 11:f3de201aace6 | 245 | if (adc_key_in < 15000) {return UP_KEY;} |
Berrng | 11:f3de201aace6 | 246 | if (adc_key_in < 35000) {return DOWN_KEY;} |
Berrng | 11:f3de201aace6 | 247 | if (adc_key_in < 53000) {return LEFT_KEY;} |
Berrng | 10:31d4d8104813 | 248 | |
Berrng | 17:c96c9af96dbb | 249 | return NO_KEY; //Wenn kein Wert eingelesen werden kann |
Berrng | 10:31d4d8104813 | 250 | } |
Berrng | 10:31d4d8104813 | 251 | |
Daniel90 | 3:05c8449bc489 | 252 | //Ende |