キッチンタイマーのプログラムです

Dependencies:   mbed SevenSegLed Sound_pwmToDig SwAnalog

回路やプログラムについての詳しい説明は、下記のblogにまとめました。 http://suupen-make.blogspot.jp/2013/11/lpc1114fn28mbedkitchen-timer.html

Committer:
suupen
Date:
Sun Jan 15 04:22:00 2012 +0000
Revision:
1:f638c70e028c
Parent:
0:032a7d6c30d8
Child:
2:269bb751dd19

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 1:f638c70e028c 1 //#define debug
suupen 0:032a7d6c30d8 2 //===========================================================================
suupen 0:032a7d6c30d8 3 // mbed seven segment LED PCB board example program
suupen 0:032a7d6c30d8 4 //
suupen 0:032a7d6c30d8 5 // kitchen timer
suupen 1:f638c70e028c 6 //
suupen 1:f638c70e028c 7 // V1.0 120109
suupen 1:f638c70e028c 8 // V1.1 120115 bug fix (40min ihyo no settei de merody ga naranai)
suupen 0:032a7d6c30d8 9 //
suupen 0:032a7d6c30d8 10 // <schematic>
suupen 0:032a7d6c30d8 11 // 1.seven segment numeric LED Display : OSL40562-LR
suupen 0:032a7d6c30d8 12 // http://akizukidenshi.com/download/OSL40562-LR.pdf
suupen 0:032a7d6c30d8 13 //
suupen 0:032a7d6c30d8 14 // OSL40562-LR Resister mbed
suupen 0:032a7d6c30d8 15 // Pin No Function [ohm] Function
suupen 0:032a7d6c30d8 16 // ---------------------------------------------------------------------------
suupen 0:032a7d6c30d8 17 // 1 segment E 200 P13
suupen 0:032a7d6c30d8 18 // 2 segment D 200 P12
suupen 0:032a7d6c30d8 19 // 3 segment Dp 200 P11
suupen 0:032a7d6c30d8 20 // 4 segment C 200 p10
suupen 0:032a7d6c30d8 21 // 5 segment G 200 P9
suupen 0:032a7d6c30d8 22 // 6 common 4 - P8
suupen 0:032a7d6c30d8 23 // 7 segment B 200 P5
suupen 0:032a7d6c30d8 24 // 8 common 3 - P6
suupen 0:032a7d6c30d8 25 // 9 common 2 - p7
suupen 0:032a7d6c30d8 26 // 10 segment F 200 p18
suupen 0:032a7d6c30d8 27 // 11 segment A 200 P19
suupen 0:032a7d6c30d8 28 // 12 common 1 - p20
suupen 0:032a7d6c30d8 29 //
suupen 0:032a7d6c30d8 30 // 2.sound speaker
suupen 0:032a7d6c30d8 31 // /
suupen 0:032a7d6c30d8 32 // mbed -------------- --/
suupen 0:032a7d6c30d8 33 // p21(pwmOut) -----| R:0[ohm] |-----| | speaker(8[ohm])
suupen 0:032a7d6c30d8 34 // -------------- | |
suupen 0:032a7d6c30d8 35 // | |
suupen 0:032a7d6c30d8 36 // p22(DigitalOut) ------------------------| |
suupen 0:032a7d6c30d8 37 // --\
suupen 0:032a7d6c30d8 38 // \
suupen 0:032a7d6c30d8 39 // 3.sw
suupen 0:032a7d6c30d8 40 // sw6(left sw)
suupen 0:032a7d6c30d8 41 // ----
suupen 0:032a7d6c30d8 42 // p25 --------o o----------- GND
suupen 0:032a7d6c30d8 43 //
suupen 0:032a7d6c30d8 44 // sw5(up sw)
suupen 0:032a7d6c30d8 45 // ----
suupen 0:032a7d6c30d8 46 // p26 --------o o----------- GND
suupen 0:032a7d6c30d8 47 //
suupen 0:032a7d6c30d8 48 // sw4(down sw)
suupen 0:032a7d6c30d8 49 // ----
suupen 0:032a7d6c30d8 50 // p27 --------o o----------- GND
suupen 0:032a7d6c30d8 51 //
suupen 0:032a7d6c30d8 52 // sw3(right sw)
suupen 0:032a7d6c30d8 53 // ----
suupen 0:032a7d6c30d8 54 // p28 --------o o----------- GND
suupen 0:032a7d6c30d8 55 //
suupen 0:032a7d6c30d8 56 // sw2(b sw)
suupen 0:032a7d6c30d8 57 // ----
suupen 0:032a7d6c30d8 58 // p29 --------o o----------- GND
suupen 0:032a7d6c30d8 59 //
suupen 0:032a7d6c30d8 60 // sw1(a sw)
suupen 0:032a7d6c30d8 61 // ----
suupen 0:032a7d6c30d8 62 // p30 --------o o----------- GND
suupen 0:032a7d6c30d8 63 //
suupen 0:032a7d6c30d8 64 // V1.0 2011/12/11
suupen 0:032a7d6c30d8 65 //
suupen 0:032a7d6c30d8 66 //
suupen 0:032a7d6c30d8 67 //===========================================================================
suupen 0:032a7d6c30d8 68 #include "mbed.h"
suupen 0:032a7d6c30d8 69 #include "SevenSegLed.h"
suupen 0:032a7d6c30d8 70 #include "Sound.h"
suupen 0:032a7d6c30d8 71 #include "SwDigital.h"
suupen 0:032a7d6c30d8 72
suupen 0:032a7d6c30d8 73 DigitalOut led1(LED1);
suupen 0:032a7d6c30d8 74 DigitalOut led2(LED2);
suupen 0:032a7d6c30d8 75 DigitalOut led3(LED3);
suupen 0:032a7d6c30d8 76 DigitalOut led4(LED4);
suupen 0:032a7d6c30d8 77
suupen 0:032a7d6c30d8 78 Ticker timeout100ms; // 100ms interrupt
suupen 0:032a7d6c30d8 79
suupen 0:032a7d6c30d8 80 Sound sound(p21, p22);
suupen 0:032a7d6c30d8 81 SwDigital sw(p25, p26, p27, p28, p29, p30); // left, up, down, right, b, a
suupen 0:032a7d6c30d8 82 enum{
suupen 0:032a7d6c30d8 83 leftSw,
suupen 0:032a7d6c30d8 84 upSw,
suupen 0:032a7d6c30d8 85 downSw,
suupen 0:032a7d6c30d8 86 rightSw,
suupen 0:032a7d6c30d8 87 bSw,
suupen 0:032a7d6c30d8 88 aSw
suupen 0:032a7d6c30d8 89 };
suupen 0:032a7d6c30d8 90
suupen 0:032a7d6c30d8 91 //SevenSegLed sevenSegLed(1, 1, p19, p7, p10, p12, p13, p20, p9, p11, p18, p5, p6, p8); // OSL40562-LR(schematic bug)
suupen 0:032a7d6c30d8 92 SevenSegLed sevenSegLed(1, 1, p19, p5, p10, p12, p13, p18, p9, p11, p20, p7, p6, p8); // OSL40562-LR(seikiban)
suupen 0:032a7d6c30d8 93
suupen 0:032a7d6c30d8 94 uint8_t D_7seg[4] = {0, 0, 0, 0};
suupen 0:032a7d6c30d8 95 uint8_t D_dot[4] = {0, 1, 0, 0};
suupen 0:032a7d6c30d8 96
suupen 0:032a7d6c30d8 97 uint8_t C_flicker; // timer setti ji no henko keta flicker kyoka (100[ms]/count) 0:flicker request ohter:kinsi
suupen 0:032a7d6c30d8 98 #define Z_flicker (5 * 10)
suupen 0:032a7d6c30d8 99
suupen 0:032a7d6c30d8 100 int16_t D_timerSec = 3 * 60; // timer no settai chi (1/1 [s]/count)
suupen 0:032a7d6c30d8 101 int16_t C_timerSec; // timer keiji jikan (1/1[s]/count)
suupen 0:032a7d6c30d8 102
suupen 0:032a7d6c30d8 103 enum timer_t{
suupen 0:032a7d6c30d8 104 stop,
suupen 0:032a7d6c30d8 105 set1min,
suupen 0:032a7d6c30d8 106 set10min,
suupen 0:032a7d6c30d8 107 count,
suupen 0:032a7d6c30d8 108 chime,
suupen 0:032a7d6c30d8 109 timeup
suupen 0:032a7d6c30d8 110 };
suupen 0:032a7d6c30d8 111 timer_t M_timer = stop;
suupen 0:032a7d6c30d8 112
suupen 0:032a7d6c30d8 113 uint8_t F_flip100ms; // 100ms keika goto ni 0 or 1
suupen 0:032a7d6c30d8 114 uint8_t F_flip500ms; // 500ms keika goto ni 0 or 1
suupen 0:032a7d6c30d8 115
suupen 0:032a7d6c30d8 116 void beep(void){
suupen 0:032a7d6c30d8 117 // tone1
suupen 0:032a7d6c30d8 118 Sound::sound_t oto = {1,0x95,200,100};
suupen 0:032a7d6c30d8 119 sound.sound_sound(oto);
suupen 0:032a7d6c30d8 120 }
suupen 0:032a7d6c30d8 121
suupen 0:032a7d6c30d8 122 // "westminster chime" merody data
suupen 0:032a7d6c30d8 123 const Sound::sound_t WESTMINSTER[] = {
suupen 0:032a7d6c30d8 124 // onkai,hatuon jikan[ms]
suupen 0:032a7d6c30d8 125 {1,0xA4,1200,1000},
suupen 0:032a7d6c30d8 126 {1,0xF4,1200,1000},
suupen 0:032a7d6c30d8 127 {1,0x94,1200,1000},
suupen 0:032a7d6c30d8 128 {1,0xC4,2400,1000},
suupen 0:032a7d6c30d8 129
suupen 0:032a7d6c30d8 130 {1,0xC4,1200,1000},
suupen 0:032a7d6c30d8 131 {1,0x94,1200,1000},
suupen 0:032a7d6c30d8 132 {1,0xA4,1200,1000},
suupen 0:032a7d6c30d8 133 {1,0xF4,2400,1000},
suupen 0:032a7d6c30d8 134
suupen 0:032a7d6c30d8 135 {1,0xA4,1200,1000},
suupen 0:032a7d6c30d8 136 {1,0xF4,1200,1000},
suupen 0:032a7d6c30d8 137 {1,0x94,1200,1000},
suupen 0:032a7d6c30d8 138 {1,0xC4,2400,1000},
suupen 0:032a7d6c30d8 139
suupen 0:032a7d6c30d8 140 {1,0xC4,1200,1000},
suupen 0:032a7d6c30d8 141 {1,0x94,1200,1000},
suupen 0:032a7d6c30d8 142 {1,0xA4,1200,1000},
suupen 0:032a7d6c30d8 143 {1,0xF4,2400,1000},
suupen 0:032a7d6c30d8 144
suupen 0:032a7d6c30d8 145 {1,0xFF,1000,0}, // end
suupen 0:032a7d6c30d8 146 };
suupen 0:032a7d6c30d8 147 // "ramen chime" merody data
suupen 0:032a7d6c30d8 148 const Sound::sound_t RAMEN[] = {
suupen 0:032a7d6c30d8 149 // onkai,hatuon jikan[ms]
suupen 0:032a7d6c30d8 150 {1,0xC5,300,500},
suupen 0:032a7d6c30d8 151 {1,0xD5,300,500},
suupen 0:032a7d6c30d8 152 {1,0xE5,1200,500},
suupen 0:032a7d6c30d8 153 {1,0xD5,600,500},
suupen 0:032a7d6c30d8 154 {1,0xC5,1200,500},
suupen 0:032a7d6c30d8 155
suupen 0:032a7d6c30d8 156 {1,0xC5,300,500},
suupen 0:032a7d6c30d8 157 {1,0xD5,300,500},
suupen 0:032a7d6c30d8 158 {1,0xE5,300,500},
suupen 0:032a7d6c30d8 159 {1,0xD5,300,500},
suupen 0:032a7d6c30d8 160 {1,0xC5,300,500},
suupen 0:032a7d6c30d8 161 {1,0xD5,1800,500},
suupen 0:032a7d6c30d8 162
suupen 0:032a7d6c30d8 163
suupen 0:032a7d6c30d8 164 {1,0xFF,1000,500}, // end
suupen 0:032a7d6c30d8 165 };
suupen 0:032a7d6c30d8 166
suupen 0:032a7d6c30d8 167 // "demekin no uta" merody data
suupen 0:032a7d6c30d8 168 const Sound::sound_t DEMEKIN[] = {
suupen 0:032a7d6c30d8 169 // onkai,hatuon jikan[ms]
suupen 0:032a7d6c30d8 170 {1,0xC5,600,500}, // de
suupen 0:032a7d6c30d8 171 {1,0xE5,600,500}, // me
suupen 0:032a7d6c30d8 172 {1,0x95,600,500}, // kin
suupen 0:032a7d6c30d8 173 {1,0x00,600,500},
suupen 0:032a7d6c30d8 174
suupen 0:032a7d6c30d8 175 {1,0xC5,600,500}, // de
suupen 0:032a7d6c30d8 176 {1,0xE5,600,500}, // me
suupen 0:032a7d6c30d8 177 {1,0x95,600,500}, // kin
suupen 0:032a7d6c30d8 178 {1,0x00,600,500},
suupen 0:032a7d6c30d8 179
suupen 0:032a7d6c30d8 180 {1,0xC5,600,500}, // de
suupen 0:032a7d6c30d8 181 {1,0xE5,600,500}, // me
suupen 0:032a7d6c30d8 182 {1,0x95,600,500}, // kin
suupen 0:032a7d6c30d8 183 {1,0x95,600,500}, // no
suupen 0:032a7d6c30d8 184 {1,0x95,150,500}, // shi
suupen 0:032a7d6c30d8 185 {1,0x00,900,500},
suupen 0:032a7d6c30d8 186 {1,0xE5,750,500}, // po
suupen 0:032a7d6c30d8 187 {1,0x00,450,500},
suupen 0:032a7d6c30d8 188
suupen 0:032a7d6c30d8 189 {1,0xC5,600,500}, // de
suupen 0:032a7d6c30d8 190 {1,0xE5,600,500}, // me
suupen 0:032a7d6c30d8 191 {1,0x95,600,500}, // kin
suupen 0:032a7d6c30d8 192 {1,0x00,600,500},
suupen 0:032a7d6c30d8 193
suupen 0:032a7d6c30d8 194 {1,0xC5,600,500}, // de
suupen 0:032a7d6c30d8 195 {1,0xE5,600,500}, // me
suupen 0:032a7d6c30d8 196 {1,0x95,600,500}, // kin
suupen 0:032a7d6c30d8 197 {1,0x00,600,500},
suupen 0:032a7d6c30d8 198
suupen 0:032a7d6c30d8 199 {1,0x95,600,500}, // ju
suupen 0:032a7d6c30d8 200 {1,0xE5,600,500}, // go
suupen 0:032a7d6c30d8 201 {1,0xD5,600,500}, // n
suupen 0:032a7d6c30d8 202 {1,0xC5,600,500}, // no
suupen 0:032a7d6c30d8 203 {1,0xE5,150,500}, // shi
suupen 0:032a7d6c30d8 204 {1,0x00,900,500},
suupen 0:032a7d6c30d8 205 {1,0xC5,750,500}, // po
suupen 0:032a7d6c30d8 206 {1,0x00,1350,500},
suupen 0:032a7d6c30d8 207
suupen 0:032a7d6c30d8 208 {1,0xFF,1000,0}, // end (1s keika go sai enso)
suupen 0:032a7d6c30d8 209 // {1,0xFF,0}, // end (1kaino enso de teisi suru baai)
suupen 0:032a7d6c30d8 210 };
suupen 0:032a7d6c30d8 211
suupen 0:032a7d6c30d8 212 //=============================
suupen 0:032a7d6c30d8 213 // timer SW seni
suupen 0:032a7d6c30d8 214 //=============================
suupen 0:032a7d6c30d8 215 void timerSeni(void){
suupen 0:032a7d6c30d8 216
suupen 0:032a7d6c30d8 217 // bSw(stop SW)
suupen 0:032a7d6c30d8 218 if(sw.checkEdgeOn(bSw) == 1){
suupen 0:032a7d6c30d8 219 beep();
suupen 0:032a7d6c30d8 220 M_timer = stop;
suupen 0:032a7d6c30d8 221 }
suupen 0:032a7d6c30d8 222
suupen 0:032a7d6c30d8 223 // aSw(start SW)
suupen 0:032a7d6c30d8 224 if((sw.checkEdgeOn(aSw) == 1)
suupen 0:032a7d6c30d8 225 &&(M_timer != count)
suupen 0:032a7d6c30d8 226 ){
suupen 0:032a7d6c30d8 227 beep();
suupen 0:032a7d6c30d8 228 M_timer = count;
suupen 0:032a7d6c30d8 229 C_timerSec = D_timerSec;
suupen 0:032a7d6c30d8 230 }
suupen 0:032a7d6c30d8 231
suupen 0:032a7d6c30d8 232 switch(M_timer){
suupen 0:032a7d6c30d8 233 case stop:
suupen 0:032a7d6c30d8 234 // other aSw,bSw then set1min
suupen 0:032a7d6c30d8 235 if((sw.checkEdgeOn(upSw) == 1)
suupen 0:032a7d6c30d8 236 ||(sw.checkEdgeOn(downSw) == 1)
suupen 0:032a7d6c30d8 237 ||(sw.checkEdgeOn(leftSw) == 1)
suupen 0:032a7d6c30d8 238 ||(sw.checkEdgeOn(rightSw) == 1)
suupen 0:032a7d6c30d8 239 ){
suupen 0:032a7d6c30d8 240 beep();
suupen 0:032a7d6c30d8 241 M_timer = set1min;
suupen 0:032a7d6c30d8 242 C_flicker = 0;
suupen 0:032a7d6c30d8 243 }
suupen 0:032a7d6c30d8 244 break;
suupen 0:032a7d6c30d8 245 case set1min:
suupen 0:032a7d6c30d8 246 if(sw.checkEdgeOn(leftSw) == 1){
suupen 0:032a7d6c30d8 247 beep();
suupen 0:032a7d6c30d8 248 M_timer = set10min;
suupen 0:032a7d6c30d8 249 C_flicker = 0;
suupen 0:032a7d6c30d8 250 }
suupen 0:032a7d6c30d8 251 break;
suupen 0:032a7d6c30d8 252 case set10min:
suupen 0:032a7d6c30d8 253 if(sw.checkEdgeOn(rightSw) == 1){
suupen 0:032a7d6c30d8 254 beep();
suupen 0:032a7d6c30d8 255 M_timer = set1min;
suupen 0:032a7d6c30d8 256 C_flicker = 0;
suupen 0:032a7d6c30d8 257 }
suupen 0:032a7d6c30d8 258 break;
suupen 0:032a7d6c30d8 259 case count:
suupen 0:032a7d6c30d8 260 if(C_timerSec == 0){
suupen 0:032a7d6c30d8 261 M_timer = chime;
suupen 0:032a7d6c30d8 262 }
suupen 0:032a7d6c30d8 263 break;
suupen 0:032a7d6c30d8 264
suupen 1:f638c70e028c 265 case chime: // 120115 bug fix
suupen 1:f638c70e028c 266 if(D_timerSec == (3 * 60)){
suupen 1:f638c70e028c 267 sound.sound_enso((Sound::sound_t*)RAMEN);
suupen 1:f638c70e028c 268 }
suupen 1:f638c70e028c 269 else if(D_timerSec < (60 * 60)){
suupen 1:f638c70e028c 270 sound.sound_enso((Sound::sound_t*)WESTMINSTER);
suupen 1:f638c70e028c 271 }
suupen 1:f638c70e028c 272 else{
suupen 1:f638c70e028c 273 sound.sound_enso((Sound::sound_t*)DEMEKIN);
suupen 1:f638c70e028c 274 }
suupen 0:032a7d6c30d8 275
suupen 1:f638c70e028c 276 sound.sound_enso(true);
suupen 1:f638c70e028c 277 M_timer = timeup;
suupen 1:f638c70e028c 278
suupen 0:032a7d6c30d8 279 break;
suupen 0:032a7d6c30d8 280
suupen 0:032a7d6c30d8 281 case timeup:
suupen 0:032a7d6c30d8 282 // other aSw,bSw then set1min
suupen 0:032a7d6c30d8 283 if((sw.checkEdgeOn(upSw) == 1)
suupen 0:032a7d6c30d8 284 ||(sw.checkEdgeOn(downSw) == 1)
suupen 0:032a7d6c30d8 285 ||(sw.checkEdgeOn(leftSw) == 1)
suupen 0:032a7d6c30d8 286 ||(sw.checkEdgeOn(rightSw) == 1)
suupen 0:032a7d6c30d8 287 ){
suupen 0:032a7d6c30d8 288 beep();
suupen 0:032a7d6c30d8 289 M_timer = set1min;
suupen 0:032a7d6c30d8 290 C_flicker = 0;
suupen 0:032a7d6c30d8 291 }
suupen 0:032a7d6c30d8 292 break;
suupen 0:032a7d6c30d8 293 default:
suupen 0:032a7d6c30d8 294 break;
suupen 0:032a7d6c30d8 295 }
suupen 0:032a7d6c30d8 296
suupen 0:032a7d6c30d8 297 }
suupen 0:032a7d6c30d8 298 //============================
suupen 0:032a7d6c30d8 299 // timer set
suupen 0:032a7d6c30d8 300 //============================
suupen 0:032a7d6c30d8 301 void timerSet(void){
suupen 0:032a7d6c30d8 302 int16_t work;
suupen 0:032a7d6c30d8 303
suupen 0:032a7d6c30d8 304 switch(M_timer){
suupen 0:032a7d6c30d8 305 case stop:
suupen 0:032a7d6c30d8 306 break;
suupen 0:032a7d6c30d8 307 case set1min:
suupen 0:032a7d6c30d8 308 if(sw.checkEdgeOn(upSw) == 1){
suupen 0:032a7d6c30d8 309 work = D_timerSec / 60;
suupen 0:032a7d6c30d8 310 if(work < 99){
suupen 0:032a7d6c30d8 311 beep();
suupen 0:032a7d6c30d8 312 D_timerSec += 60;
suupen 0:032a7d6c30d8 313 C_flicker = Z_flicker;
suupen 0:032a7d6c30d8 314 }
suupen 0:032a7d6c30d8 315 }
suupen 0:032a7d6c30d8 316
suupen 0:032a7d6c30d8 317 if(sw.checkEdgeOn(downSw) == 1){
suupen 0:032a7d6c30d8 318 work = D_timerSec / 60;
suupen 0:032a7d6c30d8 319 if (work > 0){
suupen 0:032a7d6c30d8 320 beep();
suupen 0:032a7d6c30d8 321 D_timerSec -= 60;
suupen 0:032a7d6c30d8 322 C_flicker = Z_flicker;
suupen 0:032a7d6c30d8 323 }
suupen 0:032a7d6c30d8 324 }
suupen 0:032a7d6c30d8 325 break;
suupen 0:032a7d6c30d8 326 case set10min:
suupen 0:032a7d6c30d8 327 if(sw.checkEdgeOn(upSw) == 1){
suupen 0:032a7d6c30d8 328 if(D_timerSec <= (98 * 60)){
suupen 0:032a7d6c30d8 329 beep();
suupen 0:032a7d6c30d8 330 D_timerSec += 600;
suupen 0:032a7d6c30d8 331 C_flicker = Z_flicker;
suupen 0:032a7d6c30d8 332 }
suupen 0:032a7d6c30d8 333 }
suupen 0:032a7d6c30d8 334
suupen 0:032a7d6c30d8 335 if(sw.checkEdgeOn(downSw) == 1){
suupen 0:032a7d6c30d8 336 if(D_timerSec >= 600){
suupen 0:032a7d6c30d8 337 beep();
suupen 0:032a7d6c30d8 338 D_timerSec -= 600;
suupen 0:032a7d6c30d8 339 C_flicker = Z_flicker;
suupen 0:032a7d6c30d8 340 }
suupen 0:032a7d6c30d8 341 }
suupen 0:032a7d6c30d8 342 break;
suupen 0:032a7d6c30d8 343 case count:
suupen 0:032a7d6c30d8 344 break;
suupen 0:032a7d6c30d8 345 case chime:
suupen 0:032a7d6c30d8 346 break;
suupen 0:032a7d6c30d8 347 case timeup:
suupen 0:032a7d6c30d8 348 break;
suupen 0:032a7d6c30d8 349 default:
suupen 0:032a7d6c30d8 350 break;
suupen 0:032a7d6c30d8 351 }
suupen 0:032a7d6c30d8 352
suupen 0:032a7d6c30d8 353 if(D_timerSec > (99 * 60)){D_timerSec = 99 * 60;}
suupen 0:032a7d6c30d8 354 }
suupen 0:032a7d6c30d8 355
suupen 0:032a7d6c30d8 356 //==========================
suupen 0:032a7d6c30d8 357 // seven segment display
suupen 0:032a7d6c30d8 358 //==========================
suupen 0:032a7d6c30d8 359 void sevenSegDisplay(void){
suupen 0:032a7d6c30d8 360 int16_t work;
suupen 0:032a7d6c30d8 361
suupen 0:032a7d6c30d8 362 switch(M_timer){
suupen 0:032a7d6c30d8 363 case stop:
suupen 0:032a7d6c30d8 364 work = D_timerSec / 600;
suupen 0:032a7d6c30d8 365 if(work == 0){D_7seg[0] = 0x10;}
suupen 0:032a7d6c30d8 366 else{D_7seg[0] = work;}
suupen 0:032a7d6c30d8 367
suupen 0:032a7d6c30d8 368 work = D_timerSec / 60;
suupen 0:032a7d6c30d8 369 work %= 10;
suupen 0:032a7d6c30d8 370 D_7seg[1] = work;
suupen 0:032a7d6c30d8 371
suupen 0:032a7d6c30d8 372 D_7seg[2] = 0x10;
suupen 0:032a7d6c30d8 373 D_7seg[3] = 0x10;
suupen 0:032a7d6c30d8 374
suupen 0:032a7d6c30d8 375
suupen 0:032a7d6c30d8 376 D_dot[0] = 0;
suupen 0:032a7d6c30d8 377 D_dot[1] = 1;
suupen 0:032a7d6c30d8 378 D_dot[2] = 0;
suupen 0:032a7d6c30d8 379 D_dot[3] = 0;
suupen 0:032a7d6c30d8 380
suupen 0:032a7d6c30d8 381 break;
suupen 0:032a7d6c30d8 382 case set1min:
suupen 0:032a7d6c30d8 383 case set10min:
suupen 0:032a7d6c30d8 384 work = D_timerSec / 600;
suupen 0:032a7d6c30d8 385 if(work == 0){
suupen 0:032a7d6c30d8 386 if(M_timer == set10min){
suupen 0:032a7d6c30d8 387 D_7seg[0] = work;
suupen 0:032a7d6c30d8 388 }
suupen 0:032a7d6c30d8 389 else{
suupen 0:032a7d6c30d8 390 D_7seg[0] = 0x10;
suupen 0:032a7d6c30d8 391 }
suupen 0:032a7d6c30d8 392 }
suupen 0:032a7d6c30d8 393 else{
suupen 0:032a7d6c30d8 394 D_7seg[0] = work;
suupen 0:032a7d6c30d8 395 }
suupen 0:032a7d6c30d8 396
suupen 0:032a7d6c30d8 397 work = D_timerSec / 60;
suupen 0:032a7d6c30d8 398 work %= 10;
suupen 0:032a7d6c30d8 399 D_7seg[1] = work;
suupen 0:032a7d6c30d8 400
suupen 0:032a7d6c30d8 401 if((C_flicker == 0) && (F_flip500ms == 0)){
suupen 0:032a7d6c30d8 402 if(M_timer == set1min){
suupen 0:032a7d6c30d8 403 D_7seg[1] = 0x10;
suupen 0:032a7d6c30d8 404 }
suupen 0:032a7d6c30d8 405 else{
suupen 0:032a7d6c30d8 406 D_7seg[0] = 0x10;
suupen 0:032a7d6c30d8 407 }
suupen 0:032a7d6c30d8 408 }
suupen 0:032a7d6c30d8 409
suupen 0:032a7d6c30d8 410 D_7seg[2] = 0x10;
suupen 0:032a7d6c30d8 411 D_7seg[3] = 0x10;
suupen 0:032a7d6c30d8 412
suupen 0:032a7d6c30d8 413 D_dot[0] = 0;
suupen 0:032a7d6c30d8 414 D_dot[1] = 1;
suupen 0:032a7d6c30d8 415 D_dot[2] = 0;
suupen 0:032a7d6c30d8 416 D_dot[3] = 0;
suupen 0:032a7d6c30d8 417
suupen 0:032a7d6c30d8 418 break;
suupen 0:032a7d6c30d8 419 case count:
suupen 0:032a7d6c30d8 420 work = C_timerSec / 600;
suupen 0:032a7d6c30d8 421 if(work == 0){D_7seg[0] = 0x10;}
suupen 0:032a7d6c30d8 422 else{D_7seg[0] = work;}
suupen 0:032a7d6c30d8 423
suupen 0:032a7d6c30d8 424 work = C_timerSec / 60;
suupen 0:032a7d6c30d8 425 work %= 10;
suupen 0:032a7d6c30d8 426 D_7seg[1] = work;
suupen 0:032a7d6c30d8 427
suupen 0:032a7d6c30d8 428 work = C_timerSec % 60;
suupen 0:032a7d6c30d8 429 work /= 10;
suupen 0:032a7d6c30d8 430 D_7seg[2] = work;
suupen 0:032a7d6c30d8 431
suupen 0:032a7d6c30d8 432 work = C_timerSec % 60;
suupen 0:032a7d6c30d8 433 work %= 10;
suupen 0:032a7d6c30d8 434 D_7seg[3] = work;
suupen 0:032a7d6c30d8 435
suupen 0:032a7d6c30d8 436 D_dot[0] = 0;
suupen 0:032a7d6c30d8 437 D_dot[1] = 1;
suupen 0:032a7d6c30d8 438 D_dot[2] = 0;
suupen 0:032a7d6c30d8 439 D_dot[3] = 0;
suupen 0:032a7d6c30d8 440
suupen 0:032a7d6c30d8 441 break;
suupen 0:032a7d6c30d8 442 case chime: // same "timeup"
suupen 1:f638c70e028c 443
suupen 1:f638c70e028c 444 #ifdef debug
suupen 1:f638c70e028c 445 D_7seg[0] = 0x0E;
suupen 1:f638c70e028c 446 D_7seg[1] = 0x10;
suupen 1:f638c70e028c 447 D_7seg[2] = 0x10;
suupen 1:f638c70e028c 448 D_7seg[3] = 0x10;
suupen 1:f638c70e028c 449 break;
suupen 1:f638c70e028c 450 #endif //debug
suupen 1:f638c70e028c 451
suupen 0:032a7d6c30d8 452 case timeup:
suupen 0:032a7d6c30d8 453 if(F_flip500ms == 1){
suupen 0:032a7d6c30d8 454 D_7seg[0] = 0x0f;
suupen 0:032a7d6c30d8 455 D_7seg[1] = 0x0f;
suupen 0:032a7d6c30d8 456 D_7seg[2] = 0x0f;
suupen 0:032a7d6c30d8 457 D_7seg[3] = 0x0f;
suupen 0:032a7d6c30d8 458 }
suupen 0:032a7d6c30d8 459 else{
suupen 0:032a7d6c30d8 460 D_7seg[0] = 0x10;
suupen 0:032a7d6c30d8 461 D_7seg[1] = 0x10;
suupen 0:032a7d6c30d8 462 D_7seg[2] = 0x10;
suupen 0:032a7d6c30d8 463 D_7seg[3] = 0x10;
suupen 0:032a7d6c30d8 464 }
suupen 0:032a7d6c30d8 465
suupen 0:032a7d6c30d8 466 D_dot[0] = 0;
suupen 0:032a7d6c30d8 467 D_dot[1] = 0;
suupen 0:032a7d6c30d8 468 D_dot[2] = 0;
suupen 0:032a7d6c30d8 469 D_dot[3] = 0;
suupen 0:032a7d6c30d8 470 break;
suupen 0:032a7d6c30d8 471 default:
suupen 0:032a7d6c30d8 472 break;
suupen 0:032a7d6c30d8 473 }
suupen 0:032a7d6c30d8 474 sevenSegLed.SevenSegLed_main(D_7seg, D_dot);
suupen 0:032a7d6c30d8 475 }
suupen 0:032a7d6c30d8 476
suupen 0:032a7d6c30d8 477 //================================
suupen 0:032a7d6c30d8 478 // 100ms interrupt
suupen 0:032a7d6c30d8 479 //================================
suupen 0:032a7d6c30d8 480 void interrupt100ms(void){
suupen 0:032a7d6c30d8 481 // led2 = !led2;
suupen 0:032a7d6c30d8 482 static uint8_t C_100ms = 0;
suupen 0:032a7d6c30d8 483
suupen 0:032a7d6c30d8 484 C_100ms++;
suupen 0:032a7d6c30d8 485 if(C_100ms > 9){C_100ms = 0;}
suupen 0:032a7d6c30d8 486
suupen 0:032a7d6c30d8 487 // flip flag
suupen 0:032a7d6c30d8 488 F_flip100ms = !F_flip100ms;
suupen 0:032a7d6c30d8 489
suupen 0:032a7d6c30d8 490 if(C_100ms < 5){F_flip500ms = 1;}
suupen 0:032a7d6c30d8 491 else{F_flip500ms = 0;}
suupen 0:032a7d6c30d8 492
suupen 0:032a7d6c30d8 493 // settei keta flicker
suupen 0:032a7d6c30d8 494 if(C_flicker > 0){C_flicker--;}
suupen 0:032a7d6c30d8 495
suupen 0:032a7d6c30d8 496 // timer counter decrement
suupen 0:032a7d6c30d8 497 if((C_100ms == 0) && (C_timerSec > 0)){C_timerSec--;}
suupen 0:032a7d6c30d8 498
suupen 0:032a7d6c30d8 499 }
suupen 0:032a7d6c30d8 500
suupen 0:032a7d6c30d8 501 //================================
suupen 0:032a7d6c30d8 502 // main
suupen 0:032a7d6c30d8 503 //================================
suupen 0:032a7d6c30d8 504 int main() {
suupen 0:032a7d6c30d8 505 timeout100ms.attach(&interrupt100ms, 0.1); // 10ms interrupt
suupen 0:032a7d6c30d8 506
suupen 0:032a7d6c30d8 507 while(1) {
suupen 0:032a7d6c30d8 508 // sw level and edge data refresh
suupen 0:032a7d6c30d8 509 sw.refreshEdgeData();
suupen 0:032a7d6c30d8 510
suupen 0:032a7d6c30d8 511 timerSeni();
suupen 0:032a7d6c30d8 512 timerSet();
suupen 0:032a7d6c30d8 513 sevenSegDisplay();
suupen 0:032a7d6c30d8 514 /*
suupen 0:032a7d6c30d8 515 // debug code
suupen 0:032a7d6c30d8 516 if((sw.checkEdgeOn(leftSw) == 1)
suupen 0:032a7d6c30d8 517 ||(sw.checkEdgeOn(rightSw) == 1)
suupen 0:032a7d6c30d8 518 ||(sw.checkEdgeOn(upSw) == 1)
suupen 0:032a7d6c30d8 519 ||(sw.checkEdgeOn(downSw) == 1)
suupen 0:032a7d6c30d8 520 ||(sw.checkEdgeOn(aSw) == 1)
suupen 0:032a7d6c30d8 521 ||(sw.checkEdgeOn(bSw) == 1)
suupen 0:032a7d6c30d8 522 ){
suupen 0:032a7d6c30d8 523 led1 = !led1;
suupen 0:032a7d6c30d8 524 }
suupen 0:032a7d6c30d8 525 */
suupen 0:032a7d6c30d8 526
suupen 0:032a7d6c30d8 527 }
suupen 0:032a7d6c30d8 528 }