Bagaimana caranya:
Siapkan Board Arduino, Modul RTC DS1307, Dan 3 Tombol (Push button )..
Download library:
-RTClib
-Wire.h
-LedControl
Schematic:
Penampakan:
Setting Jam:
Setting Menit:
Setting Detik:
Copy lalu paste Sketch dibawah ini di Arduino IDE lalu Upload
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "LedControl.h" | |
#include <Wire.h> | |
#include "RTClib.h" | |
RTC_DS1307 RTC; | |
const int JUMLAH_LED = 1; | |
const int PIN_CS = 10; | |
const int PIN_CLK = 9; | |
const int PIN_DIN = 8; | |
int set_key = A0; | |
int UP = A2; | |
int DOWN = A1; | |
int set0=1,set1=1,up0=1,up1=1,down0=1,down1=1; | |
int mode_=0,a=0; | |
LedControl lc= LedControl (PIN_DIN,PIN_CLK, PIN_CS, JUMLAH_LED); | |
int jam, menit, detik, hari; | |
const byte ANGKA [12] = {0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b,0x00,0x01}; | |
void rtc_get(void) | |
{ | |
DateTime now = RTC.now(); | |
jam = now.hour(); | |
menit = now.minute(); | |
detik = now.second(); | |
} | |
void show_jam(void) | |
{ | |
lc.setRow(0,0,ANGKA[detik%10]); | |
lc.setRow(0,1,ANGKA[detik/10]); | |
lc.setChar(0,2,'-',false); | |
lc.setRow(0,3,ANGKA[menit%10]); | |
lc.setRow(0,4,ANGKA[menit/10]); | |
lc.setChar(0,5,'-',false); | |
lc.setRow(0,6,ANGKA[jam%10]); | |
lc.setRow(0,7,ANGKA[jam/10]); | |
} | |
void Data_7segment() | |
{ | |
set0=set1;set1=digitalRead(set_key); | |
if((set0==1)&&(set1==0)) | |
{ | |
mode_++; | |
if(mode_>3)mode_=0; | |
} | |
switch(mode_) //setting jam, menit dan detik | |
{ | |
case 0:break; | |
case 1: //Setting jam | |
{ | |
up0=up1;up1=digitalRead(UP);a=1; | |
if((up0==1)&&(up1==0)) | |
{ | |
jam++; | |
if(jam>23)jam=0; | |
delay(200); | |
} | |
down0=down1;down1=digitalRead(DOWN); | |
if((down0==1)&&(down1==0)) | |
{ | |
jam--; | |
if(jam == -1)jam = 23; | |
delay(200); | |
} | |
break; | |
} | |
case 2: //setting menit | |
{ | |
up0=up1;up1=digitalRead(UP);a=1; | |
if((up0==1)&&(up1==0)) | |
{ | |
menit++; | |
if(menit>59)menit=0; | |
delay(200); | |
} | |
down0=down1;down1=digitalRead(DOWN); | |
if((down0==1)&&(down1==0)) | |
{ | |
menit--; | |
if(menit==-1)menit=59; | |
delay(200); | |
} | |
break; | |
} | |
case 3: //setting detik | |
{ | |
up0=up1;up1=(digitalRead(UP)==LOW);a=1; | |
if((up0==1)&&(up1==0)) | |
{ | |
detik++; | |
if(detik>59)detik=0; | |
delay(200); | |
} | |
down0=down1;down1=digitalRead(DOWN); | |
if((down0==1)&&(down1==0)) | |
{ | |
detik--; | |
if(detik==-1)detik=59; | |
delay(200); | |
} | |
break; | |
} | |
} | |
} | |
void Jam_digital() | |
{ | |
if(mode_==0) | |
{ | |
show_jam(); | |
rtc_get(); | |
} | |
if(mode_==1) | |
{ | |
lc.setRow(0,7,0x00); | |
lc.setRow(0,6,0x3c); | |
lc.setRow(0,5,0x7d); | |
lc.setRow(0,4,0x55); | |
lc.setRow(0,3,0x00); | |
lc.setRow(0,2,0x00); | |
lc.setRow(0,1,ANGKA[jam/10]); | |
lc.setRow(0,0,ANGKA[jam%10]); | |
} | |
if(mode_==2) | |
{ | |
lc.setRow(0,7,0x55); | |
lc.setRow(0,6,0x6f); | |
lc.setRow(0,5,0x15); | |
lc.setRow(0,4,0x10); | |
lc.setRow(0,3,0x0f); | |
lc.setRow(0,2,0x00); | |
lc.setRow(0,1,ANGKA[menit/10]); | |
lc.setRow(0,0,ANGKA[menit%10]); | |
} | |
if(mode_==3) | |
{ | |
lc.setRow(0,7,0x3d); | |
lc.setRow(0,6,0x6f); | |
lc.setRow(0,5,0x0f); | |
lc.setRow(0,4,0x10); | |
lc.setRow(0,3,0x57); | |
lc.setRow(0,2,0x00); | |
lc.setRow(0,1,ANGKA[detik/10]); | |
lc.setRow(0,0,ANGKA[detik%10]); | |
} } | |
} | |
void Read_DS1307() | |
{ | |
if(mode_==0) | |
{ | |
if(a==1) | |
{ | |
RTC.adjust(DateTime(2018,11,22,jam,menit,detik)); | |
a=0; | |
delay(200); | |
} | |
rtc_get(); | |
} | |
} | |
void setup() | |
{ | |
Serial.begin(9600); | |
Wire.begin(); | |
RTC.begin(); | |
// RTC.adjust(DateTime(__DATE__, __TIME__)); | |
// if you need set clock... just remove // from line above this | |
Wire.beginTransmission(0x68); | |
Wire.write(0x07); // move pointer to SQW address | |
// Wire.write(0x00); // turns the SQW pin off | |
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz | |
// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz | |
Wire.endTransmission(); | |
if (! RTC.isrunning()) | |
{ | |
Serial.println("RTC is NOT running!"); | |
// following line sets the RTC to the date & time this sketch was compiled | |
RTC.adjust(DateTime(__DATE__, __TIME__)); | |
} | |
lc.shutdown(0,false); | |
lc.setIntensity(0,7); | |
lc.clearDisplay(0); | |
pinMode(set_key,INPUT_PULLUP); | |
pinMode(UP,INPUT_PULLUP); | |
pinMode(DOWN,INPUT_PULLUP); | |
} | |
void loop() | |
{ | |
Data_7segment(); | |
Read_DS1307(); | |
Jam_digital(); | |
} |
Bisa ditambahkan 2 modul Max7219, Misalnya modul kedua menampilkan tanggal, bulan, tahun, dan modul MAX7219 ketiga untuk menampilkan nama Hari, Dan bisa juga menampilan jam, menit, detik, hari, tanggal, bulan, tahun dalam 1 modul atau bergantian tampil... Untuk menampilkan karakter huruf/angka lebih satu modul lihat tutorial in i---> Cara Menampilkan Text di Modul MAX7219 Seven Segment lebih dari satu modul
Selamat Berkreasi....
Terimkasih.artikel education Gan
ReplyDelete