Blinker

Dependencies:   TextLCD mbed MMA8451Q

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?

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