Lalala

Dependencies:   mbed

Committer:
DoTTi
Date:
Mon Feb 05 18:22:34 2018 +0000
Revision:
1:eddde0361c0a
Parent:
0:425c87a33e63
Lalala

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martinale 0:425c87a33e63 1 #include "mbed.h"
martinale 0:425c87a33e63 2 #include "BtnEventM0.h"
martinale 0:425c87a33e63 3
martinale 0:425c87a33e63 4 Serial pc(USBTX, USBRX);
martinale 0:425c87a33e63 5 // LSB MSB
DoTTi 1:eddde0361c0a 6 BusOut lb(/*P1_13,P1_12,P1_7,*/P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
martinale 0:425c87a33e63 7
martinale 0:425c87a33e63 8 BtnEventM0 sw4(P1_16), sw3(P0_23), sw1(P0_10), sw2(P0_15);
martinale 0:425c87a33e63 9
DoTTi 1:eddde0361c0a 10 // Zustandsangebe
DoTTi 1:eddde0361c0a 11 BusOut stLED(P1_13,P1_12,P1_7);
DoTTi 1:eddde0361c0a 12
DoTTi 1:eddde0361c0a 13
DoTTi 1:eddde0361c0a 14 const int st_run = 1;
DoTTi 1:eddde0361c0a 15 const int st_editH = 2;
DoTTi 1:eddde0361c0a 16 const int st_editM = 3;
DoTTi 1:eddde0361c0a 17 const int st_editalarmH = 4;
DoTTi 1:eddde0361c0a 18 const int st_editalarmM = 5;
DoTTi 1:eddde0361c0a 19
martinale 0:425c87a33e63 20 int blinkIdx = 0;
martinale 0:425c87a33e63 21 int hh=0, mm=0;
DoTTi 1:eddde0361c0a 22 int alarmhh=0, alarmmm=0;
DoTTi 1:eddde0361c0a 23 bool alarm = false;
martinale 0:425c87a33e63 24
DoTTi 1:eddde0361c0a 25
DoTTi 1:eddde0361c0a 26 class Timmer
DoTTi 1:eddde0361c0a 27 {
DoTTi 1:eddde0361c0a 28 public:
DoTTi 1:eddde0361c0a 29 void Init();
DoTTi 1:eddde0361c0a 30 void Run();
DoTTi 1:eddde0361c0a 31 void EditH();
DoTTi 1:eddde0361c0a 32 void EditM();
DoTTi 1:eddde0361c0a 33 void EditalarmH();
DoTTi 1:eddde0361c0a 34 void EditalarmM();
DoTTi 1:eddde0361c0a 35 public:
DoTTi 1:eddde0361c0a 36 int state;
DoTTi 1:eddde0361c0a 37 private:
DoTTi 1:eddde0361c0a 38 Timer t1;
DoTTi 1:eddde0361c0a 39 };
DoTTi 1:eddde0361c0a 40
DoTTi 1:eddde0361c0a 41 Timmer tim1;
martinale 0:425c87a33e63 42
martinale 0:425c87a33e63 43 int main()
martinale 0:425c87a33e63 44 {
DoTTi 1:eddde0361c0a 45 pc.baud(500000);
DoTTi 1:eddde0361c0a 46 sw4.Init(); // Switch state
DoTTi 1:eddde0361c0a 47 sw3.Init(); // Count UP
DoTTi 1:eddde0361c0a 48 sw1.Init(); // Count DOWN
DoTTi 1:eddde0361c0a 49 sw2.Init(); // Set Alarm
DoTTi 1:eddde0361c0a 50 tim1.Init();
DoTTi 1:eddde0361c0a 51
DoTTi 1:eddde0361c0a 52 while(1) {
DoTTi 1:eddde0361c0a 53 if(tim1.state == st_run) {
DoTTi 1:eddde0361c0a 54 tim1.Run();
DoTTi 1:eddde0361c0a 55 blinkIdx = 0;
DoTTi 1:eddde0361c0a 56 }
DoTTi 1:eddde0361c0a 57 if(tim1.state == st_editH) {
DoTTi 1:eddde0361c0a 58 tim1.EditH();
DoTTi 1:eddde0361c0a 59 blinkIdx = 3;
DoTTi 1:eddde0361c0a 60 }
DoTTi 1:eddde0361c0a 61 if(tim1.state == st_editM) {
DoTTi 1:eddde0361c0a 62 tim1.EditM();
DoTTi 1:eddde0361c0a 63 blinkIdx = -1;
DoTTi 1:eddde0361c0a 64 }
DoTTi 1:eddde0361c0a 65 if(tim1.state == st_editalarmH) {
DoTTi 1:eddde0361c0a 66 tim1.EditalarmH();
DoTTi 1:eddde0361c0a 67 blinkIdx = 3;
DoTTi 1:eddde0361c0a 68 }
DoTTi 1:eddde0361c0a 69 if(tim1.state == st_editalarmM) {
DoTTi 1:eddde0361c0a 70 tim1.EditalarmM();
DoTTi 1:eddde0361c0a 71 blinkIdx = -1;
DoTTi 1:eddde0361c0a 72 }
martinale 0:425c87a33e63 73 }
DoTTi 1:eddde0361c0a 74 }
DoTTi 1:eddde0361c0a 75
DoTTi 1:eddde0361c0a 76 void Timmer::Init()
DoTTi 1:eddde0361c0a 77 {
DoTTi 1:eddde0361c0a 78 state= st_run;
DoTTi 1:eddde0361c0a 79 t1.start();
DoTTi 1:eddde0361c0a 80 }
DoTTi 1:eddde0361c0a 81
DoTTi 1:eddde0361c0a 82 void Timmer::Run()
DoTTi 1:eddde0361c0a 83 {
DoTTi 1:eddde0361c0a 84 // 1..in die erste Zeile schreiben
DoTTi 1:eddde0361c0a 85 pc.printf("1 Clock running\n");
DoTTi 1:eddde0361c0a 86 pc.printf("3 %d\n", blinkIdx);
DoTTi 1:eddde0361c0a 87 stLED = 1;
DoTTi 1:eddde0361c0a 88
DoTTi 1:eddde0361c0a 89 while(1) {
DoTTi 1:eddde0361c0a 90 if(sw4.CheckFlag()) {
DoTTi 1:eddde0361c0a 91 state = st_editH;
DoTTi 1:eddde0361c0a 92 return;
DoTTi 1:eddde0361c0a 93 }
DoTTi 1:eddde0361c0a 94 if(sw2.CheckFlag()) {
DoTTi 1:eddde0361c0a 95 state = st_editalarmH;
DoTTi 1:eddde0361c0a 96 alarm = true;
DoTTi 1:eddde0361c0a 97 return;
DoTTi 1:eddde0361c0a 98 }
DoTTi 1:eddde0361c0a 99
DoTTi 1:eddde0361c0a 100 if(t1.read_ms() > 50) { // Ausgabe mit 20Hz,aber dafür hate 1h 60min!!!
DoTTi 1:eddde0361c0a 101 t1.reset();
DoTTi 1:eddde0361c0a 102 mm++;
DoTTi 1:eddde0361c0a 103 if(mm > 59) {
DoTTi 1:eddde0361c0a 104 mm = 0;
DoTTi 1:eddde0361c0a 105 hh++;
martinale 0:425c87a33e63 106 }
DoTTi 1:eddde0361c0a 107 if(hh > 23) {
DoTTi 1:eddde0361c0a 108 hh = 0;
DoTTi 1:eddde0361c0a 109 }
DoTTi 1:eddde0361c0a 110
DoTTi 1:eddde0361c0a 111 // Alram
DoTTi 1:eddde0361c0a 112 if(alarm == true) {
DoTTi 1:eddde0361c0a 113 if(hh == alarmhh && mm == alarmmm) {
DoTTi 1:eddde0361c0a 114 pc.printf("1 !!!ALARM!!!\n");
DoTTi 1:eddde0361c0a 115 alarmhh=0;
DoTTi 1:eddde0361c0a 116 alarmmm=0;
DoTTi 1:eddde0361c0a 117 alarm = false;
DoTTi 1:eddde0361c0a 118 }
DoTTi 1:eddde0361c0a 119 }
DoTTi 1:eddde0361c0a 120 pc.printf("2 %02d:%02d\n",hh,mm);
DoTTi 1:eddde0361c0a 121 }
martinale 0:425c87a33e63 122 }
DoTTi 1:eddde0361c0a 123 }
DoTTi 1:eddde0361c0a 124
DoTTi 1:eddde0361c0a 125 /*********** SET TIME **************/
DoTTi 1:eddde0361c0a 126
DoTTi 1:eddde0361c0a 127 void Timmer::EditH()
DoTTi 1:eddde0361c0a 128 {
DoTTi 1:eddde0361c0a 129 pc.printf("1 Edit hh\n");
DoTTi 1:eddde0361c0a 130 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 131 pc.printf("3 %d\n", blinkIdx);
DoTTi 1:eddde0361c0a 132 stLED = 2;
DoTTi 1:eddde0361c0a 133
DoTTi 1:eddde0361c0a 134 while(1) {
DoTTi 1:eddde0361c0a 135 if(sw4.CheckFlag()) {
DoTTi 1:eddde0361c0a 136 state = st_editM;
DoTTi 1:eddde0361c0a 137 return;
DoTTi 1:eddde0361c0a 138 }
DoTTi 1:eddde0361c0a 139
DoTTi 1:eddde0361c0a 140 // Count UP
DoTTi 1:eddde0361c0a 141 if(sw3.CheckFlag()) {
DoTTi 1:eddde0361c0a 142 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 143 hh++;
DoTTi 1:eddde0361c0a 144 if(hh > 23)
DoTTi 1:eddde0361c0a 145 hh = 0;
DoTTi 1:eddde0361c0a 146 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 147
DoTTi 1:eddde0361c0a 148 wait_ms(300);
DoTTi 1:eddde0361c0a 149 if(sw3.CheckButton())
DoTTi 1:eddde0361c0a 150 while(sw3.CheckButton()) {
DoTTi 1:eddde0361c0a 151 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 152 hh++;
DoTTi 1:eddde0361c0a 153 if(hh > 23)
DoTTi 1:eddde0361c0a 154 hh = 0;
DoTTi 1:eddde0361c0a 155 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 156 wait_ms(100);
DoTTi 1:eddde0361c0a 157 }
DoTTi 1:eddde0361c0a 158 }
DoTTi 1:eddde0361c0a 159
DoTTi 1:eddde0361c0a 160 // Count DOWN
DoTTi 1:eddde0361c0a 161 if(sw1.CheckFlag()) {
DoTTi 1:eddde0361c0a 162 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 163 hh--;
DoTTi 1:eddde0361c0a 164 if(hh < 0)
DoTTi 1:eddde0361c0a 165 hh = 23;
DoTTi 1:eddde0361c0a 166 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 167
DoTTi 1:eddde0361c0a 168 wait_ms(300);
DoTTi 1:eddde0361c0a 169 if(sw1.CheckButton())
DoTTi 1:eddde0361c0a 170 while(sw1.CheckButton()) {
DoTTi 1:eddde0361c0a 171 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 172 hh--;
DoTTi 1:eddde0361c0a 173 if(hh < 0)
DoTTi 1:eddde0361c0a 174 hh = 23;
DoTTi 1:eddde0361c0a 175 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 176 wait_ms(100);
DoTTi 1:eddde0361c0a 177 }
DoTTi 1:eddde0361c0a 178 }
martinale 0:425c87a33e63 179 }
martinale 0:425c87a33e63 180 }
martinale 0:425c87a33e63 181
DoTTi 1:eddde0361c0a 182 void Timmer::EditM()
martinale 0:425c87a33e63 183 {
martinale 0:425c87a33e63 184 pc.printf("1 Edit mm\n");
DoTTi 1:eddde0361c0a 185 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 186 pc.printf("3 %d\n", blinkIdx);
DoTTi 1:eddde0361c0a 187 stLED = 3;
DoTTi 1:eddde0361c0a 188
DoTTi 1:eddde0361c0a 189 while(1) {
DoTTi 1:eddde0361c0a 190 if(sw4.CheckFlag()) {
DoTTi 1:eddde0361c0a 191 state = st_run;
DoTTi 1:eddde0361c0a 192 return;
DoTTi 1:eddde0361c0a 193 }
DoTTi 1:eddde0361c0a 194
DoTTi 1:eddde0361c0a 195 // Count UP
DoTTi 1:eddde0361c0a 196 if(sw3.CheckFlag()) {
DoTTi 1:eddde0361c0a 197 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 198 mm++;
DoTTi 1:eddde0361c0a 199 if(mm > 59 )
DoTTi 1:eddde0361c0a 200 mm = 0;
DoTTi 1:eddde0361c0a 201 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 202
DoTTi 1:eddde0361c0a 203 wait_ms(300);
DoTTi 1:eddde0361c0a 204 if(sw3.CheckButton())
DoTTi 1:eddde0361c0a 205 while(sw3.CheckButton()) {
DoTTi 1:eddde0361c0a 206 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 207 mm++;
DoTTi 1:eddde0361c0a 208 if(mm > 59)
DoTTi 1:eddde0361c0a 209 mm = 0;
DoTTi 1:eddde0361c0a 210 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 211 wait_ms(100);
DoTTi 1:eddde0361c0a 212 }
DoTTi 1:eddde0361c0a 213 }
DoTTi 1:eddde0361c0a 214
DoTTi 1:eddde0361c0a 215 // Count DOWN
DoTTi 1:eddde0361c0a 216 if(sw1.CheckFlag()) {
DoTTi 1:eddde0361c0a 217 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 218 mm--;
DoTTi 1:eddde0361c0a 219 if(mm < 0)
DoTTi 1:eddde0361c0a 220 mm = 59;
DoTTi 1:eddde0361c0a 221 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 222
DoTTi 1:eddde0361c0a 223 wait_ms(300);
DoTTi 1:eddde0361c0a 224 if(sw1.CheckButton())
DoTTi 1:eddde0361c0a 225 while(sw1.CheckButton()) {
DoTTi 1:eddde0361c0a 226 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 227 mm--;
DoTTi 1:eddde0361c0a 228 if(mm < 0)
DoTTi 1:eddde0361c0a 229 mm = 59;
DoTTi 1:eddde0361c0a 230 pc.printf("2 %02d:%02d\n", hh, mm);
DoTTi 1:eddde0361c0a 231 wait_ms(100);
DoTTi 1:eddde0361c0a 232 }
DoTTi 1:eddde0361c0a 233 }
DoTTi 1:eddde0361c0a 234 }
martinale 0:425c87a33e63 235 }
martinale 0:425c87a33e63 236
DoTTi 1:eddde0361c0a 237 /*********** SET ALARM **************/
DoTTi 1:eddde0361c0a 238
DoTTi 1:eddde0361c0a 239 void Timmer::EditalarmH()
martinale 0:425c87a33e63 240 {
DoTTi 1:eddde0361c0a 241 pc.printf("1 Edit alarm hh\n");
DoTTi 1:eddde0361c0a 242 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 243 pc.printf("3 %d\n", blinkIdx);
DoTTi 1:eddde0361c0a 244 stLED = 4;
DoTTi 1:eddde0361c0a 245
DoTTi 1:eddde0361c0a 246 while(1) {
DoTTi 1:eddde0361c0a 247 if(sw2.CheckFlag()) {
DoTTi 1:eddde0361c0a 248 state = st_editalarmM;
DoTTi 1:eddde0361c0a 249 return;
DoTTi 1:eddde0361c0a 250 }
DoTTi 1:eddde0361c0a 251
DoTTi 1:eddde0361c0a 252 // Count UP
DoTTi 1:eddde0361c0a 253 if(sw3.CheckFlag()) {
DoTTi 1:eddde0361c0a 254 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 255 alarmhh++;
DoTTi 1:eddde0361c0a 256 if(alarmhh > 23)
DoTTi 1:eddde0361c0a 257 alarmhh = 0;
DoTTi 1:eddde0361c0a 258 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 259
DoTTi 1:eddde0361c0a 260 wait_ms(300);
DoTTi 1:eddde0361c0a 261 if(sw3.CheckButton())
DoTTi 1:eddde0361c0a 262 while(sw3.CheckButton()) {
DoTTi 1:eddde0361c0a 263 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 264 alarmhh++;
DoTTi 1:eddde0361c0a 265 if(alarmhh > 23)
DoTTi 1:eddde0361c0a 266 alarmhh = 0;
DoTTi 1:eddde0361c0a 267 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 268 wait_ms(100);
DoTTi 1:eddde0361c0a 269 }
DoTTi 1:eddde0361c0a 270 }
DoTTi 1:eddde0361c0a 271
DoTTi 1:eddde0361c0a 272 // Count DOWN
DoTTi 1:eddde0361c0a 273 if(sw1.CheckFlag()) {
DoTTi 1:eddde0361c0a 274 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 275 alarmhh--;
DoTTi 1:eddde0361c0a 276 if(alarmhh < 0)
DoTTi 1:eddde0361c0a 277 alarmhh = 23;
DoTTi 1:eddde0361c0a 278 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 279
DoTTi 1:eddde0361c0a 280 wait_ms(300);
DoTTi 1:eddde0361c0a 281 if(sw1.CheckButton())
DoTTi 1:eddde0361c0a 282 while(sw1.CheckButton()) {
DoTTi 1:eddde0361c0a 283 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 284 alarmhh--;
DoTTi 1:eddde0361c0a 285 if(alarmhh < 0)
DoTTi 1:eddde0361c0a 286 alarmhh = 23;
DoTTi 1:eddde0361c0a 287 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 288 wait_ms(100);
DoTTi 1:eddde0361c0a 289 }
DoTTi 1:eddde0361c0a 290 }
DoTTi 1:eddde0361c0a 291 }
martinale 0:425c87a33e63 292 }
martinale 0:425c87a33e63 293
DoTTi 1:eddde0361c0a 294 void Timmer::EditalarmM()
DoTTi 1:eddde0361c0a 295 {
DoTTi 1:eddde0361c0a 296 pc.printf("1 Edit alarm mm\n");
DoTTi 1:eddde0361c0a 297 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 298 pc.printf("3 %d\n", blinkIdx);
DoTTi 1:eddde0361c0a 299 stLED = 5;
martinale 0:425c87a33e63 300
DoTTi 1:eddde0361c0a 301 while(1) {
DoTTi 1:eddde0361c0a 302 if(sw2.CheckFlag()) {
DoTTi 1:eddde0361c0a 303 state = st_run;
DoTTi 1:eddde0361c0a 304 return;
DoTTi 1:eddde0361c0a 305 }
martinale 0:425c87a33e63 306
DoTTi 1:eddde0361c0a 307 // Count UP
DoTTi 1:eddde0361c0a 308 if(sw3.CheckFlag()) {
DoTTi 1:eddde0361c0a 309 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 310 alarmmm++;
DoTTi 1:eddde0361c0a 311 if(alarmmm > 59 )
DoTTi 1:eddde0361c0a 312 alarmmm = 0;
DoTTi 1:eddde0361c0a 313 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
martinale 0:425c87a33e63 314
DoTTi 1:eddde0361c0a 315 wait_ms(300);
DoTTi 1:eddde0361c0a 316 if(sw3.CheckButton())
DoTTi 1:eddde0361c0a 317 while(sw3.CheckButton()) {
DoTTi 1:eddde0361c0a 318 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 319 alarmmm++;
DoTTi 1:eddde0361c0a 320 if(alarmmm > 59)
DoTTi 1:eddde0361c0a 321 alarmmm = 0;
DoTTi 1:eddde0361c0a 322 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 323 wait_ms(100);
DoTTi 1:eddde0361c0a 324 }
DoTTi 1:eddde0361c0a 325 }
martinale 0:425c87a33e63 326
DoTTi 1:eddde0361c0a 327 // Count DOWN
DoTTi 1:eddde0361c0a 328 if(sw1.CheckFlag()) {
DoTTi 1:eddde0361c0a 329 // Aktion für EinfachClick z.B. cnt++ ausführen
DoTTi 1:eddde0361c0a 330 alarmmm--;
DoTTi 1:eddde0361c0a 331 if(alarmmm < 0)
DoTTi 1:eddde0361c0a 332 alarmmm = 59;
DoTTi 1:eddde0361c0a 333 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
martinale 0:425c87a33e63 334
DoTTi 1:eddde0361c0a 335 wait_ms(300);
DoTTi 1:eddde0361c0a 336 if(sw1.CheckButton())
DoTTi 1:eddde0361c0a 337 while(sw1.CheckButton()) {
DoTTi 1:eddde0361c0a 338 // ContinousPress erkannt
DoTTi 1:eddde0361c0a 339 alarmmm--;
DoTTi 1:eddde0361c0a 340 if(alarmmm < 0)
DoTTi 1:eddde0361c0a 341 alarmmm = 59;
DoTTi 1:eddde0361c0a 342 pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
DoTTi 1:eddde0361c0a 343 wait_ms(100);
DoTTi 1:eddde0361c0a 344 }
DoTTi 1:eddde0361c0a 345 }
DoTTi 1:eddde0361c0a 346 }
DoTTi 1:eddde0361c0a 347 }