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

Dependencies:   mbed SevenSegLed Sound_pwmToDig SwAnalog

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

Committer:
suupen
Date:
Mon Nov 25 05:53:25 2013 +0000
Revision:
2:269bb751dd19
Parent:
1:f638c70e028c
This program is a kitchen Timer of using LPC1114FN28.

Who changed what in which revision?

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