Dot Matrix LED clock with RTC ver1.0

Dependencies:   ds3231 mbed

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);