Jam 7 Segment dengan Arduino Nano dan RTC DS1302

Belajar arduino saya mulai dengan membuat jam 7 segment kayaknya biasa banget hehehehe..

ini skemanya..

skema jam 7 segment dengan arduino nano

dalam prakteknya saya menggunakan Arduino Nano, ditambah 6 buah display 7 segment, dan 1 RTC 1302
dan berikut ini codenya..

 


 
#include <DS1302RTC.h>

#include <Time.h>
#include <TimeLib.h>

 DS1302RTC RTC(A0, A1, A2);
 
int stime = 200;
byte angka[]  = {
0b11000000,
0b11111001,
0b10100100,
0b10110000,
0b10011001,
0b10010010,
0b10000010,
0b11111000,
0b10000000,
0b10010000,
0b11111111
};  

byte blok[][2] = { 
  {0b000001, 0b000010},
  {0b000100, 0b001000},  
  {0b010000, 0b100000}
  };


void dwA(byte b){
    for(int i =0 ; i < 8;i++){  
        if( (b & ( 1 << i )) != 0b0){
            digitalWrite(i,HIGH);
          } else {            
            digitalWrite(i,LOW);
            }
      }
  }
void dwB(byte b){
  int startB = 8;
    for(int i =0 ; i < 8;i++){  
        if( (b & ( 1 << i )) != 0b0){
            digitalWrite(i + startB,HIGH);
          } else {            
            digitalWrite(i + startB,LOW);
            }
      }
  }


  /*
  Bisa juga begini:

  void dwA(byte b){
   PORTD = b;
  }
  void dwB(byte b){
   PORTB = b;
    }
  */
  
void setup() {   

    for(int i =0;i < 14;i++){
      pinMode(i,OUTPUT);      
      }
 
    setSyncProvider(RTC.get);
   setSyncInterval(10);
   int s = 0;
   while(timeStatus()== timeNotSet && s < 30){
    s++;
    delay(100);
   }

/*
     setTime(06,38,0,8,11,2016); 
     RTC.set(now()); 
 */  
}



  

 

void displayAngka(int angkanya, int mblok) {
  

  int satuan = angkanya;
  int puluhan = 0;
  if (angkanya > 9) {
    satuan = angkanya % 10;
    puluhan = (angkanya - satuan) / 10;
  }

   
    
  dwA(angka[10]); 
  dwB(blok[mblok][0]); 
  delayMicroseconds(stime); 
  dwA(angka[satuan]); 
  delayMicroseconds(stime);
  
  dwA(angka[10]); 
  dwB(blok[mblok][1]); 
  delayMicroseconds(stime); 
  dwA(angka[puluhan]);  
  delayMicroseconds(stime); 
  

}  

void loop() {   
  displayAngka(second(),0);
  displayAngka(minute(),1);
  displayAngka(hour(),2);
  
  delayMicroseconds(stime);    
  
} 

Video