iModela(iM-01) de sakusei sita PCB no kitchenTimer wo clock ni henko sita monodesu.

Dependencies:   SevenSegLed SwDigital mbed Sound

Committer:
suupen
Date:
Sun Apr 08 03:36:28 2012 +0000
Revision:
0:b7cdbc649bd3
Child:
1:fe97b047f96b

        

Who changed what in which revision?

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