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 22 11:30:33 2012 +0000
Revision:
1:fe97b047f96b
Parent:
0:b7cdbc649bd3
V2.0 120422 : melody to chime no kaizen. hyoji no kaizen

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