This program is a clock that uses a kitchen Timer boad.

Dependencies:   SevenSegLed Sound_pwmToDig SwAnalog mbed

Fork of kitchenTimer_Clock by suu pen

LPC1114FN28(mbed)を使ったデジタル時計

<概要>

以前作成したLPC1114FN28(mbed)で作ったキッチンタイマーのプログラムを変更して、デジタル時計をつくりました。

回路はキッチンタイマーのものをそのまま使っています。基板作成や、プログラムの書き込み方法については、次のblogを参照してください。

回路図、PCB、WINSTAR PCB for iModela、などのデータはこちらからダウンロードできます。

<時計動作の説明>

基板の電源を入れると、表示が“FFFF”になり、メロディーが流れます。

スイッチは、 右上(赤)SW :時計時刻設定の開始・完了 右下(青)SW :時計時刻設定のキャンセル 左(黒)十字SW:時計時刻変更用 となっています。

/media/uploads/suupen/----p1170422.jpg デジタル時計のLED,SWの説明

時刻あわせをする場合は、赤色SWを押して時刻設定モードにしてから、十字SWで時刻を変更し、再度赤色SWを押すと時刻確定して、時計動作を始めます。

時計設定をやめたいときは、青色SWを押します。

時計計時は、4桁の7セグメントLEDで、時・分表示をします。秒は、一番右側のドットLEDの点滅で表示しています。

ドットや、数字の変化は、滑らかに変化させています。

毎正時(59から00分に変化)した時に、メロディーを流します。

<プログラムについて>

プログラムは、こちらからからダウンロードできます。

Committer:
suupen
Date:
Sun Dec 01 00:45:55 2013 +0000
Revision:
2:04062925e025
Parent:
1:fe97b047f96b
This program is a clock that uses a kitchen Timer board.

Who changed what in which revision?

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