stoppuhr s

Dependencies:   PinDetect TextLCD mbed

Fork of FeuerwehrStoppuhr0805 by Jovica D.

Committer:
joca89
Date:
Thu May 23 07:50:13 2013 +0000
Revision:
5:9772a9e2c7e9
Parent:
4:8c274febf3b0
Code der nicht ganz funktioniert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fox46 0:48f4880c730b 1 #include "mbed.h"
fox46 0:48f4880c730b 2 #include "PinDetect.h"
joca89 1:3ed42298abc3 3 #include "stdlib.h"
fox46 0:48f4880c730b 4 #include "TextLCD.h"
joca89 3:6f6ee868bf8c 5
fox46 0:48f4880c730b 6
fox46 0:48f4880c730b 7 DigitalOut myled(LED1);
fox46 0:48f4880c730b 8 Timer t;
joca89 3:6f6ee868bf8c 9 TextLCD lcd(p36, p34, p24, p23, p15, p16); // rs, e, d0-d3
fox46 0:48f4880c730b 10 PinDetect pb1(p18);
fox46 0:48f4880c730b 11 PinDetect pb2(p19);
joca89 5:9772a9e2c7e9 12 DigitalIn dip0(p26);
joca89 5:9772a9e2c7e9 13 DigitalIn dip1(p27);
joca89 5:9772a9e2c7e9 14 DigitalIn dip2(p28);
joca89 5:9772a9e2c7e9 15 DigitalIn dip3(p29);
joca89 1:3ed42298abc3 16 Serial pc(USBTX, USBRX);
joca89 3:6f6ee868bf8c 17 Serial hm(p9, p10); // definiere UART für HM-TPR433 Modul
joca89 3:6f6ee868bf8c 18 DigitalOut config(p22);
joca89 3:6f6ee868bf8c 19 DigitalOut enable(p21);
fox46 0:48f4880c730b 20
fox46 0:48f4880c730b 21 // Global count variable
fox46 0:48f4880c730b 22 int volatile count=0;
fox46 0:48f4880c730b 23 int volatile resetcnt=0;
joca89 1:3ed42298abc3 24 int volatile zz1=0;
joca89 1:3ed42298abc3 25 int volatile zz2=0;
joca89 1:3ed42298abc3 26 int volatile sblock=0;
joca89 1:3ed42298abc3 27 int volatile reset=0;
joca89 5:9772a9e2c7e9 28 int volatile D=1;
joca89 4:8c274febf3b0 29
joca89 1:3ed42298abc3 30 int ms;
joca89 1:3ed42298abc3 31 int sec;
joca89 1:3ed42298abc3 32 int min;
joca89 1:3ed42298abc3 33 int ms1;
joca89 1:3ed42298abc3 34 char buffer[9];
joca89 1:3ed42298abc3 35 char zwischenzeit[9];
joca89 1:3ed42298abc3 36 char zwischenzeit1[9];
joca89 5:9772a9e2c7e9 37 //char config_buffer[16];
joca89 1:3ed42298abc3 38
joca89 1:3ed42298abc3 39 /*Funktions Dekleration*/
joca89 3:6f6ee868bf8c 40
joca89 3:6f6ee868bf8c 41 void empfangen() {
joca89 3:6f6ee868bf8c 42 // Note: you need to actually read from the serial to clear the RX interrupt
joca89 3:6f6ee868bf8c 43
joca89 3:6f6ee868bf8c 44 t.stop();
joca89 3:6f6ee868bf8c 45 pc.printf("Gesamtzeit: %s\n", buffer);
joca89 3:6f6ee868bf8c 46 pc.printf("Zwischenzeit: %s\n", zwischenzeit);
joca89 3:6f6ee868bf8c 47 pc.printf("Zwischenzeit: %s\n", zwischenzeit1);
joca89 3:6f6ee868bf8c 48 sblock=1;
joca89 5:9772a9e2c7e9 49 hm.getc();
joca89 5:9772a9e2c7e9 50 enable = 1;
joca89 5:9772a9e2c7e9 51 wait(0.01);
joca89 3:6f6ee868bf8c 52 return;
joca89 3:6f6ee868bf8c 53 }
joca89 3:6f6ee868bf8c 54
joca89 3:6f6ee868bf8c 55 void konfiguration(void)
joca89 3:6f6ee868bf8c 56 {
joca89 3:6f6ee868bf8c 57 config = 0;
joca89 3:6f6ee868bf8c 58 enable = 0;
joca89 5:9772a9e2c7e9 59 //hm.printf("AA FA F0"); //Standardkonfiguration laden
joca89 5:9772a9e2c7e9 60 hm.printf("AA FA E1");
joca89 5:9772a9e2c7e9 61 //hm.getc();
joca89 5:9772a9e2c7e9 62 //pc.printf("%s\n", hm.getc()); // um RX Interrupt zu löschen, Zeichen auslesen
joca89 5:9772a9e2c7e9 63
joca89 5:9772a9e2c7e9 64 /*hm.printf("%x", 0xAA);
joca89 5:9772a9e2c7e9 65 hm.printf("%x", 0xFA);
joca89 5:9772a9e2c7e9 66 hm.printf("%x", 0xD2);
joca89 5:9772a9e2c7e9 67 hm.printf("%x", 0x19E2E460); //AA FA D2 19 E2 E4 60 */
joca89 5:9772a9e2c7e9 68
joca89 5:9772a9e2c7e9 69
joca89 3:6f6ee868bf8c 70 wait(0.1);
joca89 3:6f6ee868bf8c 71 config = 1;
joca89 3:6f6ee868bf8c 72 return;
joca89 3:6f6ee868bf8c 73 }
joca89 5:9772a9e2c7e9 74 /*
joca89 5:9772a9e2c7e9 75 void frequenz_config(void)
joca89 5:9772a9e2c7e9 76 {
joca89 5:9772a9e2c7e9 77 config = 0;
joca89 5:9772a9e2c7e9 78 enable = 0;
joca89 5:9772a9e2c7e9 79 if((dip0 == 0) && (dip1 == 0) && (dip2 == 0) && (dip3 == 0)) //Schalterstellung0
joca89 5:9772a9e2c7e9 80 {
joca89 5:9772a9e2c7e9 81 hm.printf("AA FA D2 19 CF D1 90"); //Frequenz1 = 433050000Hz
joca89 5:9772a9e2c7e9 82 }
joca89 5:9772a9e2c7e9 83 else if((dip0 == 1) && (dip1 == 0) && (dip2 == 0) && (dip3 == 0)) //Schalterstellung 1
joca89 5:9772a9e2c7e9 84 {
joca89 5:9772a9e2c7e9 85 hm.printf("AA FA D2 19 D3 A2 20"); //Frequenz2 = 433300000Hz
joca89 5:9772a9e2c7e9 86 }
joca89 5:9772a9e2c7e9 87 else if((dip0 == 0) && (dip1 == 1) && (dip2 == 0) && (dip3 == 0)) //Schalterstellung 2
joca89 5:9772a9e2c7e9 88 {
joca89 5:9772a9e2c7e9 89 hm.printf("AA FA D2 19 D7 72 B0"); //Frequenz3 = 433550000Hz
joca89 5:9772a9e2c7e9 90 }
joca89 5:9772a9e2c7e9 91 else if((dip0 == 1) && (dip1 == 1) && (dip2 == 0) && (dip3 == 0)) //Schalterstellung 3
joca89 5:9772a9e2c7e9 92 {
joca89 5:9772a9e2c7e9 93 hm.printf("AA FA D2 19 DB 43 40"); //Frequenz4 = 433800000Hz
joca89 5:9772a9e2c7e9 94 }
joca89 5:9772a9e2c7e9 95 else if((dip0 == 0) && (dip1 == 0) && (dip2 == 1) && (dip3 == 0)) //Schalterstellung 4
joca89 5:9772a9e2c7e9 96 {
joca89 5:9772a9e2c7e9 97 hm.printf("AA FA D2 19 DF 13 D0"); //Frequenz5 = 434050000Hz
joca89 5:9772a9e2c7e9 98 }
joca89 5:9772a9e2c7e9 99 else if((dip0 == 1) && (dip1 == 0) && (dip2 == 1) && (dip3 == 0)) //Schalterstellung 5
joca89 5:9772a9e2c7e9 100 {
joca89 5:9772a9e2c7e9 101 hm.printf("AA FA D2 19 E2 E4 60"); //Frequenz6 = 434550000Hz
joca89 5:9772a9e2c7e9 102 }
joca89 5:9772a9e2c7e9 103 else if((dip0 == 0) && (dip1 == 1) && (dip2 == 1) && (dip3 == 0)) //Schalterstellung 6
joca89 5:9772a9e2c7e9 104 {
joca89 5:9772a9e2c7e9 105 hm.printf("AA FA D2 19 E6 B4 F0"); //Frequenz7 = 434550000Hz
joca89 5:9772a9e2c7e9 106 }
joca89 5:9772a9e2c7e9 107 else if((dip0 == 1) && (dip1 == 1) && (dip2 == 1) && (dip3 == 0)) //Schalterstellung 7
joca89 5:9772a9e2c7e9 108 {
joca89 5:9772a9e2c7e9 109 hm.printf("AA FA D2 19 EA 85 80"); //Frequenz8 = 433300000Hz
joca89 5:9772a9e2c7e9 110 }
joca89 5:9772a9e2c7e9 111 else if((dip0 == 0) && (dip1 == 0) && (dip2 == 0) && (dip3 == 1)) //Schalterstellung 8
joca89 5:9772a9e2c7e9 112 {
joca89 5:9772a9e2c7e9 113 hm.printf("AA FA D2 19 EE 56 10"); //Frequenz9 = 435050000Hz
joca89 5:9772a9e2c7e9 114 }
joca89 5:9772a9e2c7e9 115 else if((dip0 == 1) && (dip1 == 0) && (dip2 == 0) && (dip3 == 1)) //Schalterstellung 9
joca89 5:9772a9e2c7e9 116 {
joca89 5:9772a9e2c7e9 117 hm.printf("AA FA D2 19 F2 26 A0"); //Frequenz10 = 435300000Hz
joca89 5:9772a9e2c7e9 118 }
joca89 5:9772a9e2c7e9 119 else if((dip0 == 0) && (dip1 == 1) && (dip2 == 0) && (dip3 == 1)) //Schalterstellung A
joca89 5:9772a9e2c7e9 120 {
joca89 5:9772a9e2c7e9 121 hm.printf("AA FA D2 19 F5 F7 30"); //Frequenz11 = 435550000Hz
joca89 5:9772a9e2c7e9 122 }
joca89 5:9772a9e2c7e9 123 else if((dip0 == 1) && (dip1 == 1) && (dip2 == 0) && (dip3 == 1)) //Schalterstellung B
joca89 5:9772a9e2c7e9 124 {
joca89 5:9772a9e2c7e9 125 hm.printf("AA FA D2 19 F9 C7 C0"); //Frequenz12 = 435800000Hz
joca89 5:9772a9e2c7e9 126 }
joca89 5:9772a9e2c7e9 127 else if((dip0 == 0) && (dip1 == 0) && (dip2 == 1) && (dip3 == 1)) //Schalterstellung C
joca89 5:9772a9e2c7e9 128 {
joca89 5:9772a9e2c7e9 129 hm.printf("AA FA D2 19 FD 98 50"); //Frequenz13 = 436050000Hz
joca89 5:9772a9e2c7e9 130 }
joca89 5:9772a9e2c7e9 131 else if((dip0 == 1) && (dip1 == 0) && (dip2 == 1) && (dip3 == 1)) //Schalterstellung D
joca89 5:9772a9e2c7e9 132 {
joca89 5:9772a9e2c7e9 133 hm.printf("AA FA D2 0x1A 01 68 E0"); //Frequenz14 = 436300000Hz
joca89 5:9772a9e2c7e9 134 }
joca89 5:9772a9e2c7e9 135 else if((dip0 == 0) && (dip1 == 1) && (dip2 == 1) && (dip3 == 1)) //Schalterstellung E
joca89 5:9772a9e2c7e9 136 {
joca89 5:9772a9e2c7e9 137 hm.printf("AA FA D2 1A 05 39 70"); //Frequenz15 = 436550000Hz
joca89 5:9772a9e2c7e9 138 }
joca89 5:9772a9e2c7e9 139 else if((dip0 == 1) && (dip1 == 1) && (dip2 == 1) && (dip3 == 1)) //Schalterstellung F
joca89 5:9772a9e2c7e9 140 {
joca89 5:9772a9e2c7e9 141 hm.printf("AA FA D2 1A 09 0A 00"); //Frequenz16 = 436800000Hz
joca89 5:9772a9e2c7e9 142 }
joca89 5:9772a9e2c7e9 143 else
joca89 5:9772a9e2c7e9 144 {
joca89 5:9772a9e2c7e9 145 lcd.cls();
joca89 5:9772a9e2c7e9 146 lcd.printf("Fehler");
joca89 5:9772a9e2c7e9 147 wait(0.8);
joca89 5:9772a9e2c7e9 148 }
joca89 5:9772a9e2c7e9 149 wait(0.1);
joca89 5:9772a9e2c7e9 150 config = 1;
joca89 5:9772a9e2c7e9 151 return;
joca89 5:9772a9e2c7e9 152 }
joca89 5:9772a9e2c7e9 153 */
joca89 3:6f6ee868bf8c 154
joca89 1:3ed42298abc3 155 void stoppuhr(void)
joca89 1:3ed42298abc3 156 {
joca89 1:3ed42298abc3 157 ms = t.read_ms(); //hole mir den TimerWert in ms
joca89 1:3ed42298abc3 158 sec = (ms/1000); //erzeuge mir durch division eine sekunde - aktueller Timerwert/1000 - z.b: 2548/1000=2sec
joca89 1:3ed42298abc3 159 ms = ms - (sec*1000); //stelle meine ms richtig
joca89 1:3ed42298abc3 160 min = (sec/60); //erzeuge mir Minuten
joca89 1:3ed42298abc3 161 sec = sec - (min*60); //stelle Sekunden richtig
joca89 1:3ed42298abc3 162 ms = (ms/10);
joca89 1:3ed42298abc3 163 ms1 = (ms/10); //erzeuge mir zwei Stellen nach komma
joca89 1:3ed42298abc3 164 sprintf(buffer, "%02d:%02d:%02d", min, sec, ms); //schreibe in den buffer
joca89 1:3ed42298abc3 165 return;
joca89 1:3ed42298abc3 166 }
joca89 1:3ed42298abc3 167
joca89 1:3ed42298abc3 168 void reset_halten( void )
joca89 3:6f6ee868bf8c 169 {
joca89 5:9772a9e2c7e9 170 if(sblock==1) // Reset für Durchgang erhöhen
joca89 1:3ed42298abc3 171 {
joca89 1:3ed42298abc3 172 t.stop();
joca89 1:3ed42298abc3 173 t.reset();
joca89 1:3ed42298abc3 174 stoppuhr();
joca89 1:3ed42298abc3 175 sprintf(zwischenzeit,"%01d:%02d:%1d", min, sec, ms1);
joca89 1:3ed42298abc3 176 sprintf(zwischenzeit1,"%01d:%02d:%1d", min, sec, ms1);
joca89 1:3ed42298abc3 177 resetcnt=0;
joca89 1:3ed42298abc3 178 count=0;
joca89 1:3ed42298abc3 179 zz1=0;
joca89 1:3ed42298abc3 180 zz2=0;
joca89 1:3ed42298abc3 181 sblock=0;
joca89 1:3ed42298abc3 182 D++;
joca89 5:9772a9e2c7e9 183 if(D>99){D=1;}
joca89 1:3ed42298abc3 184 }
joca89 5:9772a9e2c7e9 185 if(sblock==0) // Reset für ungewolten Durchgang
joca89 5:9772a9e2c7e9 186 {
joca89 5:9772a9e2c7e9 187 t.stop();
joca89 5:9772a9e2c7e9 188 t.reset();
joca89 5:9772a9e2c7e9 189 stoppuhr();
joca89 5:9772a9e2c7e9 190 sprintf(zwischenzeit,"%01d:%02d:%1d", min, sec, ms1);
joca89 5:9772a9e2c7e9 191 sprintf(zwischenzeit1,"%01d:%02d:%1d", min, sec, ms1);
joca89 5:9772a9e2c7e9 192 resetcnt=0;
joca89 5:9772a9e2c7e9 193 count=0;
joca89 5:9772a9e2c7e9 194 zz1=0;
joca89 5:9772a9e2c7e9 195 zz2=0;
joca89 5:9772a9e2c7e9 196 sblock=0;
joca89 5:9772a9e2c7e9 197 }
joca89 1:3ed42298abc3 198 }
fox46 0:48f4880c730b 199
fox46 0:48f4880c730b 200 // Callback routine is interrupt activated by a debounced pb1 hit
fox46 0:48f4880c730b 201 void pb1_hit_callback (void) {
joca89 1:3ed42298abc3 202
joca89 1:3ed42298abc3 203 ++count; //erhöhe die Variable count nach jedem drücken des Startbuttoms um 1
joca89 1:3ed42298abc3 204
joca89 1:3ed42298abc3 205 if ((resetcnt==0) && (count <= 1)&& (sblock==0))
joca89 1:3ed42298abc3 206 {
joca89 1:3ed42298abc3 207 t.reset(); //restiere Timer
joca89 1:3ed42298abc3 208 t.start(); //starte Timer
joca89 1:3ed42298abc3 209 resetcnt=1;
joca89 5:9772a9e2c7e9 210 enable = 0;
joca89 1:3ed42298abc3 211 }
joca89 1:3ed42298abc3 212 else if ((resetcnt==1) && (count <= 2) && (sblock==0))
joca89 1:3ed42298abc3 213 {
joca89 1:3ed42298abc3 214 zz1=1;
joca89 1:3ed42298abc3 215 sprintf(zwischenzeit,"%01d:%02d:%1d", min, sec, ms1);
joca89 1:3ed42298abc3 216 resetcnt=2;
joca89 1:3ed42298abc3 217 }
joca89 1:3ed42298abc3 218 else if ((resetcnt==2) && (count <= 3) && (sblock==0))
joca89 1:3ed42298abc3 219 {
joca89 1:3ed42298abc3 220 zz2=1;
joca89 1:3ed42298abc3 221 sprintf(zwischenzeit1,"%01d:%02d:%1d", min, sec, ms1);
joca89 1:3ed42298abc3 222 }
joca89 1:3ed42298abc3 223 else
joca89 1:3ed42298abc3 224 {
joca89 5:9772a9e2c7e9 225 resetcnt=resetcnt++;
joca89 5:9772a9e2c7e9 226 if(resetcnt==100){ resetcnt=3;}
joca89 1:3ed42298abc3 227 }
joca89 1:3ed42298abc3 228 resetcnt=resetcnt++;
fox46 0:48f4880c730b 229 }
joca89 4:8c274febf3b0 230
joca89 5:9772a9e2c7e9 231 void pb2_hit_callback (void) { //Stoppen des Timers ohne Funk
joca89 5:9772a9e2c7e9 232 t.stop();
joca89 5:9772a9e2c7e9 233 pc.printf("Gesamtzeit: %s\n", buffer);
joca89 5:9772a9e2c7e9 234 pc.printf("Zwischenzeit: %s\n", zwischenzeit);
joca89 5:9772a9e2c7e9 235 pc.printf("Zwischenzeit: %s\n", zwischenzeit1);
joca89 5:9772a9e2c7e9 236 sblock=1;
joca89 5:9772a9e2c7e9 237 }
joca89 3:6f6ee868bf8c 238
joca89 5:9772a9e2c7e9 239 void stoppen( void ) //Kompletter Anzeigereset bei gedrückt halten
joca89 5:9772a9e2c7e9 240 {
joca89 5:9772a9e2c7e9 241 t.stop();
joca89 5:9772a9e2c7e9 242 t.reset();
joca89 5:9772a9e2c7e9 243 stoppuhr();
joca89 5:9772a9e2c7e9 244 sprintf(zwischenzeit,"%01d:%02d:%1d", min, sec, ms1);
joca89 5:9772a9e2c7e9 245 sprintf(zwischenzeit1,"%01d:%02d:%1d", min, sec, ms1);
joca89 5:9772a9e2c7e9 246 resetcnt=0;
joca89 5:9772a9e2c7e9 247 count=0;
joca89 5:9772a9e2c7e9 248 zz1=0;
joca89 5:9772a9e2c7e9 249 zz2=0;
joca89 5:9772a9e2c7e9 250 sblock=0;
joca89 5:9772a9e2c7e9 251 D=0;
joca89 5:9772a9e2c7e9 252 }
joca89 5:9772a9e2c7e9 253
joca89 5:9772a9e2c7e9 254 int main()
joca89 5:9772a9e2c7e9 255 {
joca89 5:9772a9e2c7e9 256 // Use internal pullup for pushbutton
joca89 5:9772a9e2c7e9 257 pb1.mode(PullUp);
joca89 5:9772a9e2c7e9 258 pb2.mode(PullUp);
joca89 5:9772a9e2c7e9 259 dip0.mode(PullUp);
joca89 5:9772a9e2c7e9 260 dip1.mode(PullUp);
joca89 5:9772a9e2c7e9 261 dip2.mode(PullUp);
joca89 5:9772a9e2c7e9 262 dip3.mode(PullUp);
joca89 5:9772a9e2c7e9 263 // Delay for initial pullup to take effect
joca89 5:9772a9e2c7e9 264 wait(0.01);
fox46 0:48f4880c730b 265 // Setup Interrupt callback functions for a pb hit
fox46 0:48f4880c730b 266 pb1.attach_deasserted(&pb1_hit_callback);
joca89 4:8c274febf3b0 267 pb1.attach_deasserted_held(&reset_halten);
joca89 5:9772a9e2c7e9 268 pb2.attach_deasserted(&pb2_hit_callback);
joca89 5:9772a9e2c7e9 269 pb2.attach_deasserted_held(&stoppen);
fox46 0:48f4880c730b 270 // Start sampling pb inputs using interrupts
fox46 0:48f4880c730b 271 pb1.setSampleFrequency();
joca89 5:9772a9e2c7e9 272 pb2.setSampleFrequency();
joca89 5:9772a9e2c7e9 273
joca89 5:9772a9e2c7e9 274 konfiguration();
joca89 5:9772a9e2c7e9 275 //frequenz_config();
joca89 5:9772a9e2c7e9 276 hm.attach(&empfangen);
joca89 5:9772a9e2c7e9 277
joca89 3:6f6ee868bf8c 278
fox46 0:48f4880c730b 279 while (1) {
joca89 5:9772a9e2c7e9 280 wait(.01);
joca89 1:3ed42298abc3 281 lcd.cls();
joca89 5:9772a9e2c7e9 282 // myled = !myled; // LED1 blickt
joca89 1:3ed42298abc3 283 stoppuhr(); //rufe Funktion stoppuhr auf
joca89 1:3ed42298abc3 284 lcd.locate(0, 0); //setze den curser auf Zeihen 0 Reihe 1
joca89 1:3ed42298abc3 285 lcd.printf("D%02d", D); //Formatiere mein LCD-Ausgabe nach D00 (zwei stellen)
joca89 1:3ed42298abc3 286 lcd.locate(4, 0);
joca89 1:3ed42298abc3 287 lcd.printf("ZE:%s", buffer);
joca89 1:3ed42298abc3 288 if(zz1==1)
joca89 1:3ed42298abc3 289 {
joca89 1:3ed42298abc3 290 lcd.locate(0, 1);
joca89 1:3ed42298abc3 291 lcd.printf("A%s", zwischenzeit);
joca89 1:3ed42298abc3 292 }
joca89 1:3ed42298abc3 293 if(zz2==1)
joca89 1:3ed42298abc3 294 {
joca89 1:3ed42298abc3 295 lcd.locate(8, 1);
joca89 1:3ed42298abc3 296 lcd.printf("B%s", zwischenzeit1);
joca89 5:9772a9e2c7e9 297 }
fox46 0:48f4880c730b 298 }
fox46 0:48f4880c730b 299
joca89 1:3ed42298abc3 300 }