kohacraft Lab
/
kc_matrixclock_withRTC
Dot Matrix LED clock with RTC ver1.0
Diff: main.cpp
- Revision:
- 2:9c618daf65f5
- Parent:
- 1:5577d93280da
- Child:
- 3:179ec78e9158
diff -r 5577d93280da -r 9c618daf65f5 main.cpp --- a/main.cpp Tue Aug 11 05:02:15 2015 +0000 +++ b/main.cpp Tue Aug 11 08:05:41 2015 +0000 @@ -25,6 +25,7 @@ int hour =1;// bool minChange = 0;// bool hourChange = 0;// +bool swChange = 0;//スイッチが押された //時間の数字をドッドの数字に変換 unsigned char hourDecfont( int num , int colm ) @@ -116,7 +117,12 @@ //1秒のカウントアップ void secUp() { - sec++; + sec++; +} + +void changeClock() +{ + if( sec >= 60 ) { sec = 0; @@ -134,7 +140,23 @@ hour = 0; hourChange = 1; } - + + + //RTCに現在の時間を記録 + if( swChange != 0 ) + { + ds3231_time_t rtc_time; + rtc_time.hours = hour; + rtc_time.minutes = min; + rtc_time.seconds = sec; + rtc_time.mode = 1; //12時間モード + secInt.disable_irq(); //割り込み禁止 + int value = rtc.set_time( rtc_time ); //書き込み + secInt.enable_irq(); //割り込み許可 + } + minChange = 0; + hourChange = 0; + swChange = 0; } int main() { @@ -146,16 +168,18 @@ //TLC5940初期設定 setup ( num_ics ); + wait(0.2); + //DS3231初期設定 ds3231_cntl_stat_t data = {0,0}; //SQWに1秒のクロックを出力する rtc.set_cntl_stat_reg( data ); secInt.rise( &secUp ); //RTCの1秒クロックでカウントアップする - wait(0.1); + wait(0.2); //DS3231に記録されている時間を読み出す ds3231_time_t time; - int value = rtc.get_time(&time); + rtc.get_time(&time); hour = time.hours; if( hour > 12 ) hour -=12; @@ -170,19 +194,30 @@ unsigned short LEDS[16]; while(1) { + + //スイッチが押されていないか + if( slowSw == 1 ) + { + sec++; + swChange = 1; + } + if( fastSw == 1 ) + { + min++; + swChange = 1; + } + changeClock(); //16行分ダイナミック点灯させる for( int colmn=0 ; colmn<16 ; colmn++ ) { - - for( int h=0; h<16 ; h++ ) LEDS[h] = 0; LEDS[colmn] = (unsigned short)brightMax; if( colmn<8 ) - fontOut( decfont( sec , colmn ) ); + fontOut( decfont( min , colmn ) ); else - fontOut( hourDecfont( min , colmn-8 ) ); + fontOut( hourDecfont( hour , colmn-8 ) ); update_led ( LEDS);