Jam
dengan RTC dasar
----------------------------------------------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal
lcd(43,
45, 47, 49,51,53); // RS,E,D4,D5,D6,D7
#include "Wire.h"
#define DS1307_ADDRESS 0x68
int d,m,j,hk,bl,th,tg
;
void setup() {
Wire.begin();
lcd.begin(16,2);
pinMode(18,OUTPUT); digitalWrite (18,LOW); //Kaki RTC Gnd
pinMode(19,OUTPUT); digitalWrite (19,HIGH); //Kaki RTC
VCC
}
void loop() {
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS,
7);
d = bcdToDec(Wire.read());
m = bcdToDec(Wire.read());
j = bcdToDec(Wire.read() &
0b111111); //24 hour time
hk = bcdToDec(Wire.read()); //0-6
-> sunday - Saturday
tg = bcdToDec(Wire.read());
bl = bcdToDec(Wire.read());
th = bcdToDec(Wire.read());
delay (333);
String waktu1 = "Jam : "+ String (j)+":"+String
(m)+":"+String (d) ;
String waktu2 = "Tgl :" + String (tg)+" "+String (bl)+"
" +String (th) ;
lcd.clear() ;
lcd.setCursor(0,0);
lcd.print(waktu1);
lcd.setCursor(0,1);
lcd.print(waktu2);
}
byte bcdToDec(byte val) {
// Convert binary coded decimal
to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
byte decToBcd(byte val){
// Convert normal decimal
numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
----------------------------------------------------------------------------------------
Program di atas hanya untuk menampilkan waktu yg ada di RTC saja. bila ternyata waktu yang ditampilkan tidak sesuai maka tidak ada jalan untuk membetulkannya. Untuk Merubah nilai RTC agar sesuai dengan waktu yg ada gunakan program dasar ini.
Jam 2
----------------------------------------------------------------------------------------
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
//workaround for issue #527
void setup(){
Wire.begin();
Serial.begin(9600);
pinMode(18,OUTPUT); digitalWrite (18,LOW); //Kaki RTC
Gnd
pinMode(19,OUTPUT); digitalWrite (19,HIGH); //Kaki RTC
VCC
setDateTime(); //MUST CONFIGURE IN FUNCTION
}
void loop(){
printDate(); delay(1000);
}
void setDateTime(){
byte second = 41; // isi nilai detik 0-59
byte minute = 0; //isi nilai Menit 0-59
byte hour = 23; //isi nilai Jam 0-23
byte weekDay = 1; // 0-6
byte monthDay = 18; // isi nilai Tanggah 1-31
byte month = 10; //isi nilai Bulan 1-12
byte year =
15; // isi nilai Tahun 0-99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //stop Oscillator
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(zero); //start
Wire.endTransmission();
}
byte
decToBcd(byte val){
// Convert normal decimal numbers to
binary coded decimal
return ( (val/10*16) + (val%10) );
}
byte
bcdToDec(byte val) {
// Convert binary coded decimal to
normal decimal numbers
return ( (val/16*10) + (val%16) );
}
void
printDate(){
// Reset the register pointer
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS,
7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
//print the date EG 3/1/11
23:59:59
Serial.print(month);
Serial.print("/");
Serial.print(monthDay);
Serial.print("/");
Serial.print(year);
Serial.print("
");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
----------------------------------------------------------------------------------------
Jam Yang Bisa Diatur secara langsung
untuk membuat jam digital yang dapat di seting secara langsung tanpa memerlukan laptop dan programer maka kita perlu membuat rangkaian di bawah ini.
Dalam latihan kali ini kita membutuhkan
Mikrokontroller
Rangkaian saklar untuk memasukan data
LCD 16x2 Karakter
----------------------------------------------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal
lcd(43,
45, 47, 49,51,53); // RS,E,D4,D5,D6,D7
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
int d,m,j,hk,bl,th,tg ;
int k=1 ; int tm=1;
int ta=9 ; int tb=8; int tc=7;
String hari;
void setup() {
Wire.begin();
lcd.begin(16,2);
pinMode(ta,INPUT); pinMode(tb,INPUT);pinMode(tc,INPUT);
pinMode(18,OUTPUT); digitalWrite
(18,LOW); //Kaki RTC Gnd
pinMode(19,OUTPUT); digitalWrite
(19,HIGH); //Kaki RTC VCC
}
void loop() {
if (k==1) {
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
d =
bcdToDec(Wire.read());
m =
bcdToDec(Wire.read());
j =
bcdToDec(Wire.read() & 0b111111); //24 hour time
hk =
bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
tg =
bcdToDec(Wire.read());
bl =
bcdToDec(Wire.read());
th =
bcdToDec(Wire.read());
String waktuu =
String (j/10)+String (j%10)+":"+String (m/10)+ String (m%10)+":"+String
(d/10)+String (d%10) ;
String waktu2 =
hari+ " " +String
(tg)+":"+String (bl)+":" +String (th) ;
lcd.clear() ;
lcd.setCursor(0,0);
lcd.print(waktuu);
lcd.setCursor(0,1);
lcd.print(waktu2);
if (digitalRead (ta)
==1) { k=2; delay (200); }
else delay (733);
}
if (hk==0)
hari="Minggu" ;
if (hk==1)
hari="Senin" ;
if (hk==2)
hari="Selasa" ;
if (hk==3)
hari="Rabu" ;
if (hk==4)
hari="Kamis" ;
if (hk==5)
hari="Jum'at" ;
if (hk==6)
hari="Saptu" ;
if (k==2) {
if (tm==1){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("
Merubah Jam ");
lcd.setCursor(0,1);
lcd.print("1.
Ya 2. Tidak ");
if (digitalRead (tb)==1) { delay (100); k=1; }
if (digitalRead (ta)==1) {delay (100); tm=2;}
delay (200);
}
if (tm==2){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Jam
: "); lcd.print (j);
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1)
{ j=j+1; if (j>24 ) j=0; delay (100); }
if (digitalRead (tb)==1)
{ j=j-1; if (j<0)
j=23; delay (100); }
if (digitalRead (tc)==1) {tm=3; delay (100); }
delay(300); ;
}
if (tm==3){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Menit : "); lcd.print (String (m/10)+ String
(m%10));
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1)
{ m=m+1; if (m>59) m=0; delay (100); }
if (digitalRead (tb)==1)
{ m=m-1; if (m<0) m=59; delay (100); }
if (digitalRead (tc)==1) {tm=4; delay (100); }
delay(200); ;
}
if (tm==4){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Hari
: "); lcd.print (hari);
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1) { hk=hk+1; delay (100); }
if (digitalRead (tb)==1) { hk=hk-1; delay (100); }
if (digitalRead (tc)==1) {tm=5; delay (100); }
delay(200); ;
}
if (tm==5){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Tanggal : "); lcd.print (tg);
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1) { tg=tg+1; delay (100); }
if (digitalRead (tb)==1) { tg=tg-1; delay (100); }
if (digitalRead (tc)==1) {tm=6; delay (100); }
delay(200); ;
}
if (tm==6){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Bulan : "); lcd.print (bl);
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1) { bl=bl+1; delay (100); }
if (digitalRead (tb)==1) { bl=bl-1; delay (100); }
if (digitalRead (tc)==1) {tm=7; delay (100); }
delay(200); ;
}
if (tm==7){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Tahun : "); lcd.print (th);
lcd.setCursor(0,1);
lcd.print("1=
+ 2= -
3=OK");
if (digitalRead (ta)==1) { th=th+1; delay (100); }
if (digitalRead (tb)==1) { th=th-1; delay (100); }
if (digitalRead (tc)==1) {tm=8; delay (100); }
delay(200); ;
}
if (tm==8){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Data
Disimpan");
lcd.setCursor(0,1);
lcd.print("1=
Ya 2= Tidak");
if (digitalRead (ta)==1) {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
//stop Oscillator
Wire.write(decToBcd(2));
Wire.write(decToBcd(m));
Wire.write(decToBcd(j));
Wire.write(decToBcd(hk));
Wire.write(decToBcd(tg));
Wire.write(decToBcd(bl));
Wire.write(decToBcd(th));
Wire.write(zero);
//start
Wire.endTransmission();
delay (100);
tm=1; k=1;
}
if (digitalRead (tb)==1) { tm=1; k=1; }
delay(200); ;
}
}
}
byte bcdToDec(byte val)
{
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10)
+ (val%16) );
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16)
+ (val%10) );
}
----------------------------------------------------------------------------------------
Coba juga listing program di bawah ini. ayoo semangaath......
----------------------------------------------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal lcd(43, 45, 47, 49,51,53); // RS,E,D4,D5,D6,D7
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
int d,m,j,hk,bl,th,tg ;
int k=1 ; int tm=1;
int ta=9 ; int tb=8; int tc=7;
String hari;
void setup() {
Wire.begin();
lcd.begin(16,2);
pinMode(ta,INPUT); pinMode(tb,INPUT);pinMode(tc,INPUT);
pinMode (18,OUTPUT); digitalWrite(18,0); // Untuk Memberi Tegangan 0 Volt ke RTC
pinMode (19,OUTPUT); digitalWrite(19,1); // Untuk Memberi Tegangan 5 Volt ke RTC
}
void loop() {
if (k==1) {
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
d = bcdToDec(Wire.read());
m = bcdToDec(Wire.read());
j = bcdToDec(Wire.read() & 0b111111); //24 hour time
hk = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
tg = bcdToDec(Wire.read());
bl = bcdToDec(Wire.read());
th = bcdToDec(Wire.read());
delay (233);
String waktuu = "Jam :" + String (j/10)+String (j%10)+":"+String (m/10)+ String (m%10)+":"+String (d/10)+String (d%10) ;
String waktu2 = "1.Atur Jam" ;
lcd.clear() ;
lcd.setCursor(0,0);
lcd.print(waktuu);
lcd.setCursor(0,1);
lcd.print(waktu2);
if (digitalRead (ta) ==1 ) { k=2; delay (400); }
}
if (hk==0) hari="Minggu" ;
if (hk==1) hari="Senin" ;
if (hk==2) hari="Selasa" ;
if (hk==3) hari="Rabu" ;
if (hk==4) hari="Kamis" ;
if (hk==5) hari="Jum'at" ;
if (hk==6) hari="Saptu" ;
if (k==2) {
if (tm==1){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print(" Merubah Jam ");
lcd.setCursor(0,1);
lcd.print("1. Ya 2. Tidak ");
if (digitalRead (tb)==1) { delay (100); k=1; }
if (digitalRead (ta)==1) {delay (100); tm=2;}
delay (100);
}
if (tm==2){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Jam : "); lcd.print (j);
lcd.setCursor(0,1);
lcd.print("1= + 2= - 3=OK");
if (digitalRead (ta)==1) {
j=j+1; delay (100);
if (j>23 ) j=0; }
if (digitalRead (tb)==1) {
j=j-1; delay (100);
if ( j < 0 ) j=23 ; }
if (digitalRead (tc)==1) {tm=3; delay (100); }
delay(300); ;
}
if (tm==3){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Menit : "); lcd.print (String (m/10)+ String (m%10));
lcd.setCursor(0,1);
lcd.print("1= + 2= - 3=OK");
if (digitalRead (ta)==1) {
m=m+1; delay (100);
if (m > 59) m=0;}
if (digitalRead (tb)==1) {
m=m-1; delay (100);
if (m<0) m=59; }
if (digitalRead (tc)==1) {tm=4; delay (100); }
delay(100); ;
}
if (tm==4){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Data Disimpan");
lcd.setCursor(0,1);
lcd.print("1= Ya 2= Tidak");
if (digitalRead (ta)==1) {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //stop Oscillator
Wire.write(decToBcd(10));
Wire.write(decToBcd(m));
Wire.write(decToBcd(j));
Wire.write(decToBcd(hk));
Wire.write(decToBcd(tg));
Wire.write(decToBcd(bl));
Wire.write(decToBcd(th));
Wire.write(zero); //start
Wire.endTransmission();
delay (100);
tm=1; k=1;
}
if (digitalRead (tb)==1) { tm=1; k=1; }
delay(100); ;
}
}
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
Coba juga listing program di bawah ini. ayoo semangaath......
----------------------------------------------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal lcd(43, 45, 47, 49,51,53); // RS,E,D4,D5,D6,D7
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
int d,m,j,hk,bl,th,tg ;
int k=1 ; int tm=1;
int ta=9 ; int tb=8; int tc=7;
String hari;
void setup() {
Wire.begin();
lcd.begin(16,2);
pinMode(ta,INPUT); pinMode(tb,INPUT);pinMode(tc,INPUT);
pinMode (18,OUTPUT); digitalWrite(18,0); // Untuk Memberi Tegangan 0 Volt ke RTC
pinMode (19,OUTPUT); digitalWrite(19,1); // Untuk Memberi Tegangan 5 Volt ke RTC
}
void loop() {
if (k==1) {
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
d = bcdToDec(Wire.read());
m = bcdToDec(Wire.read());
j = bcdToDec(Wire.read() & 0b111111); //24 hour time
hk = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
tg = bcdToDec(Wire.read());
bl = bcdToDec(Wire.read());
th = bcdToDec(Wire.read());
delay (233);
String waktuu = "Jam :" + String (j/10)+String (j%10)+":"+String (m/10)+ String (m%10)+":"+String (d/10)+String (d%10) ;
String waktu2 = "1.Atur Jam" ;
lcd.clear() ;
lcd.setCursor(0,0);
lcd.print(waktuu);
lcd.setCursor(0,1);
lcd.print(waktu2);
if (digitalRead (ta) ==1 ) { k=2; delay (400); }
}
if (hk==0) hari="Minggu" ;
if (hk==1) hari="Senin" ;
if (hk==2) hari="Selasa" ;
if (hk==3) hari="Rabu" ;
if (hk==4) hari="Kamis" ;
if (hk==5) hari="Jum'at" ;
if (hk==6) hari="Saptu" ;
if (k==2) {
if (tm==1){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print(" Merubah Jam ");
lcd.setCursor(0,1);
lcd.print("1. Ya 2. Tidak ");
if (digitalRead (tb)==1) { delay (100); k=1; }
if (digitalRead (ta)==1) {delay (100); tm=2;}
delay (100);
}
if (tm==2){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Jam : "); lcd.print (j);
lcd.setCursor(0,1);
lcd.print("1= + 2= - 3=OK");
if (digitalRead (ta)==1) {
j=j+1; delay (100);
if (j>23 ) j=0; }
if (digitalRead (tb)==1) {
j=j-1; delay (100);
if ( j < 0 ) j=23 ; }
if (digitalRead (tc)==1) {tm=3; delay (100); }
delay(300); ;
}
if (tm==3){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Menit : "); lcd.print (String (m/10)+ String (m%10));
lcd.setCursor(0,1);
lcd.print("1= + 2= - 3=OK");
if (digitalRead (ta)==1) {
m=m+1; delay (100);
if (m > 59) m=0;}
if (digitalRead (tb)==1) {
m=m-1; delay (100);
if (m<0) m=59; }
if (digitalRead (tc)==1) {tm=4; delay (100); }
delay(100); ;
}
if (tm==4){
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Data Disimpan");
lcd.setCursor(0,1);
lcd.print("1= Ya 2= Tidak");
if (digitalRead (ta)==1) {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //stop Oscillator
Wire.write(decToBcd(10));
Wire.write(decToBcd(m));
Wire.write(decToBcd(j));
Wire.write(decToBcd(hk));
Wire.write(decToBcd(tg));
Wire.write(decToBcd(bl));
Wire.write(decToBcd(th));
Wire.write(zero); //start
Wire.endTransmission();
delay (100);
tm=1; k=1;
}
if (digitalRead (tb)==1) { tm=1; k=1; }
delay(100); ;
}
}
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
Latihan 1
Latihan 3
Tidak ada komentar:
Posting Komentar