Selasa, 27 Oktober 2015

Latihan Dua


Jam dengan RTC dasar
Latihan Membuat jam dengan Mikrokontroller + LCD + RTC







----------------------------------------------------------------------------------------

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

}

----------------------------------------------------------------------------------------


Latihan  1
Latihan  3

Tidak ada komentar:

Posting Komentar