Membuat Jam berbasis Arduino dengan display seven segment max7219

      Mungkin Kalau membuat jam digital versi mikrokontroller menurut saya rasanya kurang lengkap kalau tidak dilengkapi dengan adanya settingan jam, menit dan detiknya... Disini saya kasih cara membuat jam digital dengan 3 tombol dengan display seven segment modul MAX7219,  Yaitu tombol Setup_key, tombol UP dan tombol DOWN, Dan cara kerjanya ketika ditekan puss button setup_key pertama tampil settingan Jam,  lalu push button setup_key yang kedua tampil setingan menit, dan tekan yang ke tiga tampil setingan detik, dan puss button setup_key yang ke empat akan menyimpan semua settingan lalu kembali ke tampilan jam..

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

#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....








1 comment for "Membuat Jam berbasis Arduino dengan display seven segment max7219"

Komentar hanya untuk yang baik-baik dan tidak spam