Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed MMA8451Q
Blinker.cpp@17:c96c9af96dbb, 2014-06-27 (annotated)
- Committer:
- Berrng
- Date:
- Fri Jun 27 13:04:38 2014 +0000
- Revision:
- 17:c96c9af96dbb
- Parent:
- 16:3775d1fa074b
- Child:
- 18:8876780cb268
Finale Version
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 | 11:f3de201aace6 | 119 | } |
| Berrng | 11:f3de201aace6 | 120 | } |
| Berrng | 17:c96c9af96dbb | 121 | else //Einstieg Komfortblinker links |
| Berrng | 10:31d4d8104813 | 122 | { |
| Berrng | 17:c96c9af96dbb | 123 | char x = 3; //x Zählvariable |
| Berrng | 11:f3de201aace6 | 124 | for (x=3; x>=1; x--) |
| Berrng | 10:31d4d8104813 | 125 | { |
| Daniel90 | 14:38a4ae533a01 | 126 | Blinker_L_Led = 0; |
| Berrng | 10:31d4d8104813 | 127 | lcd.cls(); |
| Berrng | 13:243a94718e51 | 128 | lcd.locate(1,1); |
| Berrng | 13:243a94718e51 | 129 | lcd.printf("Komfortblinker"); |
| Berrng | 10:31d4d8104813 | 130 | wait(z); |
| Berrng | 10:31d4d8104813 | 131 | lcd.locate(15,0); |
| Berrng | 17:c96c9af96dbb | 132 | lcd.printf("%d",x); //Ausgabe der Var. x auf dem LCD |
| Berrng | 11:f3de201aace6 | 133 | lcd.locate(0,0); |
| Berrng | 10:31d4d8104813 | 134 | lcd.printf("<--"); |
| Daniel90 | 14:38a4ae533a01 | 135 | Blinker_L_Led = 1; |
| Berrng | 10:31d4d8104813 | 136 | wait(z); |
| Berrng | 10:31d4d8104813 | 137 | } |
| Berrng | 10:31d4d8104813 | 138 | } |
| Berrng | 17:c96c9af96dbb | 139 | Programmwahl(); |
| Berrng | 17:c96c9af96dbb | 140 | } |
| Berrng | 16:3775d1fa074b | 141 | |
| Berrng | 16:3775d1fa074b | 142 | |
| Berrng | 17:c96c9af96dbb | 143 | // Programm für die Ansteuerung der rechten Blinker |
| Berrng | 16:3775d1fa074b | 144 | void BlinkerR() |
| Berrng | 16:3775d1fa074b | 145 | { |
| Berrng | 16:3775d1fa074b | 146 | buttonState = NO_KEY; |
| Berrng | 16:3775d1fa074b | 147 | lcd.cls(); |
| Berrng | 16:3775d1fa074b | 148 | lcd.locate(1,1); |
| Berrng | 16:3775d1fa074b | 149 | lcd.printf("Blinker Rechts"); |
| Berrng | 16:3775d1fa074b | 150 | wait(z); |
| Berrng | 16:3775d1fa074b | 151 | lcd.locate(13,0); |
| Berrng | 16:3775d1fa074b | 152 | lcd.printf("-->"); |
| Berrng | 16:3775d1fa074b | 153 | Blinker_R_Led = 1; |
| Berrng | 16:3775d1fa074b | 154 | wait(wt); |
| Berrng | 16:3775d1fa074b | 155 | buttonState = read_KEY(); |
| Berrng | 10:31d4d8104813 | 156 | |
| Berrng | 17:c96c9af96dbb | 157 | if (buttonState == RIGHT_KEY) //Einstieg Dauerblinker rechts |
| Berrng | 16:3775d1fa074b | 158 | { while(1) |
| Berrng | 16:3775d1fa074b | 159 | { |
| Berrng | 16:3775d1fa074b | 160 | Blinker_R_Led = 0; |
| Berrng | 16:3775d1fa074b | 161 | buttonState = NO_KEY; |
| Berrng | 16:3775d1fa074b | 162 | lcd.cls(); |
| Berrng | 16:3775d1fa074b | 163 | lcd.locate(2,1); |
| Berrng | 16:3775d1fa074b | 164 | lcd.printf("Dauerblinker"); |
| Berrng | 16:3775d1fa074b | 165 | wait(z); |
| Berrng | 16:3775d1fa074b | 166 | lcd.locate(13,0); |
| Berrng | 16:3775d1fa074b | 167 | lcd.printf("-->"); |
| Berrng | 16:3775d1fa074b | 168 | Blinker_R_Led = 1; |
| Berrng | 16:3775d1fa074b | 169 | wait(wt); |
| Berrng | 16:3775d1fa074b | 170 | buttonState = read_KEY(); |
| Berrng | 16:3775d1fa074b | 171 | |
| Berrng | 17:c96c9af96dbb | 172 | if (buttonState == DOWN_KEY) //Abbruchbedingung Dauerblinker rechts |
| Berrng | 16:3775d1fa074b | 173 | { |
| Berrng | 16:3775d1fa074b | 174 | Programmwahl(); |
| Berrng | 16:3775d1fa074b | 175 | } |
| Berrng | 17:c96c9af96dbb | 176 | if (buttonState == UP_KEY) //Einstieg Warnblinker |
| Berrng | 16:3775d1fa074b | 177 | { BlinkerW();} |
| Berrng | 16:3775d1fa074b | 178 | } |
| Berrng | 16:3775d1fa074b | 179 | } |
| Berrng | 17:c96c9af96dbb | 180 | else //Einstieg Komfortblinker rechts |
| Berrng | 16:3775d1fa074b | 181 | { |
| Berrng | 16:3775d1fa074b | 182 | char x = 3; |
| Berrng | 16:3775d1fa074b | 183 | for (x=3; x>=1; x--) |
| Berrng | 16:3775d1fa074b | 184 | { |
| Berrng | 16:3775d1fa074b | 185 | Blinker_R_Led = 0; |
| Berrng | 16:3775d1fa074b | 186 | lcd.cls(); |
| Berrng | 16:3775d1fa074b | 187 | lcd.locate(1,1); |
| Berrng | 16:3775d1fa074b | 188 | lcd.printf("Komfortblinker"); |
| Berrng | 16:3775d1fa074b | 189 | wait(z); |
| Berrng | 16:3775d1fa074b | 190 | lcd.locate(0,0); |
| Berrng | 16:3775d1fa074b | 191 | lcd.printf("%d",x); |
| Berrng | 16:3775d1fa074b | 192 | lcd.locate(13,0); |
| Berrng | 16:3775d1fa074b | 193 | lcd.printf("-->"); |
| Berrng | 16:3775d1fa074b | 194 | Blinker_R_Led = 1; |
| Berrng | 16:3775d1fa074b | 195 | wait(z); |
| Berrng | 16:3775d1fa074b | 196 | } |
| Berrng | 16:3775d1fa074b | 197 | } |
| Berrng | 17:c96c9af96dbb | 198 | Programmwahl(); //Zurück zur Programmwahl |
| Berrng | 16:3775d1fa074b | 199 | } |
| Berrng | 16:3775d1fa074b | 200 | |
| Berrng | 16:3775d1fa074b | 201 | // Programm für die Ansteuerung der Warnblinkroutine |
| Berrng | 16:3775d1fa074b | 202 | void BlinkerW() |
| Berrng | 16:3775d1fa074b | 203 | { |
| Berrng | 17:c96c9af96dbb | 204 | while(1) |
| Berrng | 17:c96c9af96dbb | 205 | { |
| Berrng | 16:3775d1fa074b | 206 | buttonState = NO_KEY; |
| Berrng | 16:3775d1fa074b | 207 | lcd.cls(); |
| Berrng | 16:3775d1fa074b | 208 | lcd.locate(2,1); |
| Berrng | 16:3775d1fa074b | 209 | lcd.printf("Warnblinker!"); |
| Berrng | 16:3775d1fa074b | 210 | Blinker_L_Led = 0; |
| Berrng | 16:3775d1fa074b | 211 | Blinker_R_Led = 0; |
| Berrng | 16:3775d1fa074b | 212 | wait(z); |
| Berrng | 16:3775d1fa074b | 213 | lcd.locate(13,0); |
| Berrng | 16:3775d1fa074b | 214 | lcd.printf("-->"); |
| Berrng | 16:3775d1fa074b | 215 | lcd.locate(0,0); |
| Berrng | 16:3775d1fa074b | 216 | lcd.printf("<--"); |
| Berrng | 16:3775d1fa074b | 217 | Blinker_L_Led = 1; |
| Berrng | 16:3775d1fa074b | 218 | Blinker_R_Led = 1; |
| Berrng | 17:c96c9af96dbb | 219 | |
| Berrng | 16:3775d1fa074b | 220 | wait(wt); |
| Berrng | 16:3775d1fa074b | 221 | buttonState = read_KEY(); |
| Berrng | 17:c96c9af96dbb | 222 | if (buttonState==DOWN_KEY || buttonState==UP_KEY) //Doppelte Abschaltbedingung |
| Berrng | 16:3775d1fa074b | 223 | { |
| Berrng | 16:3775d1fa074b | 224 | Programmwahl(); |
| Berrng | 16:3775d1fa074b | 225 | } |
| Berrng | 17:c96c9af96dbb | 226 | } |
| Berrng | 16:3775d1fa074b | 227 | } |
| Berrng | 10:31d4d8104813 | 228 | |
| Berrng | 17:c96c9af96dbb | 229 | //Routine zum Auslesem der betätigten Taste |
| Berrng | 17:c96c9af96dbb | 230 | int read_KEY() |
| Berrng | 10:31d4d8104813 | 231 | { |
| Berrng | 10:31d4d8104813 | 232 | int adc_key_in = 0; |
| Berrng | 17:c96c9af96dbb | 233 | adc_key_in = KEYS.read_u16 (); //Einlesen der aktuell anliegenden Spannung |
| Berrng | 17:c96c9af96dbb | 234 | |
| Berrng | 17:c96c9af96dbb | 235 | if (adc_key_in > 65000) {return NO_KEY;} //Zuordnung der ermittelten Spannungswerte in Intervallen (aufgrund Schwankungen) |
| Berrng | 17:c96c9af96dbb | 236 | if (adc_key_in < 300) {return RIGHT_KEY;} |
| Berrng | 11:f3de201aace6 | 237 | if (adc_key_in < 15000) {return UP_KEY;} |
| Berrng | 11:f3de201aace6 | 238 | if (adc_key_in < 35000) {return DOWN_KEY;} |
| Berrng | 11:f3de201aace6 | 239 | if (adc_key_in < 53000) {return LEFT_KEY;} |
| Berrng | 10:31d4d8104813 | 240 | |
| Berrng | 17:c96c9af96dbb | 241 | return NO_KEY; //Wenn kein Wert eingelesen werden kann |
| Berrng | 10:31d4d8104813 | 242 | } |
| Berrng | 10:31d4d8104813 | 243 | |
| Daniel90 | 3:05c8449bc489 | 244 | //Ende |