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

Dependencies:   mbed SevenSegLed Sound_pwmToDig SwAnalog

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

Committer:
suupen
Date:
Sun Jan 08 22:52:20 2012 +0000
Revision:
0:032a7d6c30d8
Child:
1:f638c70e028c

        

Who changed what in which revision?

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