project kali ini menampilkan waktu ke LCD 16x2 dengan arduino
Peralatan Dan bahan yang harus disiapkan adalah:
1. Arduino x 1
2. TinyRTC DS1307 x 1
3. LCD1602 dengan Modul I2C x 1
4. Project board x 1
5. Kabel jumper secukupnya
Perhatikan rangkan kaki SDA dan SCL pada modul I2C
LCD dan modul RTC. Kedua modul tersebut dihubungkan
secara paralel. Rangkaian paralel ini telah kita bahas pada
Program Menampilkan Waktu di LCD
//Program Menampilkan Waktu di LCD
//dwinanjar94.blogspot.com
// include library Wire dan RTCLib
#include <Wire.h>
#include <RTClib.h>
// library LCD dengan modul I2C
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_ON HIGH
#define BACKLIGHT_OFF !BACKLIGHT_ON
// jumlah kolom dan baris LCD (16x2)
#define LCD_COL 16
#define LCD_ROW 2
#define ALIGN_LEFT 1 // teks rata kiri
#define ALIGN_CENTER 2 // teks center
#define ALIGN_RIGHT 3 // teks rata kanan
#define CLEAR true // clear screen
// ===== Konfigurasi LCD ===========
// LCD1602 dengan Modul I2C
// Alamat I2C di 0x27
// lcd_Addr, EN, RW, RS, D4, D5, D6, D7, PIN_BACKLIGHT, Pol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// pilihat format penulisan teks
byte tipe_format[] = {ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT};
byte format = ALIGN_LEFT;
// instance objek RTC
RTC_DS1307 RTC;
// jam dalam format teks
String teks_jam = "";
void setup() {
// buka koneksi ke serial monitor
Serial.begin(19200);
while(!Serial);
// buka koneksi ke RTC
Wire.begin();
RTC.begin();
delay(1000);
// jika RTC belum disetting & running
if (! RTC.isrunning()) {
// set waktu RTC sesuai waktu di komputer
RTC.adjust(DateTime(__DATE__, __TIME__));
Serial.println("RTC is NOT Running");
} else {
// RTC normal
Serial.println("RTC OK!");
}
// Settingan LCD
lcd.begin(LCD_COL,LCD_ROW);
// Nyalakan Backlight
lcd.setBacklight(BACKLIGHT_ON);
}
void loop() {
// tampilkan data setiap detik
if( nonblocking_delay(1000) ){
// Clear sebelum menampilkan tanggal di baris 1
// rata tengah
SetDisplay(Tanggal(), 0, ALIGN_CENTER, CLEAR);
// tanpa clear, langsung cetak jam di baris 2
SetDisplay(Jam(), 1, ALIGN_CENTER, !CLEAR);
}
}
// fung Jam, mengonversi jam ke string
String Jam(){
DateTime now = RTC.now();
teks_jam = "";
if( now.hour() < 10 ) teks_jam.concat(0);
teks_jam.concat(now.hour());
teks_jam.concat(":");
if( now.minute() < 10 ) teks_jam.concat(0);
teks_jam.concat(now.minute());
teks_jam.concat(":");
if( now.second() < 10 ) teks_jam.concat(0);
teks_jam.concat(now.second());
return teks_jam;
}
// fungsi tanggal
// mengonversi tanggal ke String
String Tanggal(){
DateTime now = RTC.now();
String teks_tanggal = "";
if( now.day() < 10 ) teks_tanggal.concat(0);
teks_tanggal.concat(now.day());
teks_tanggal.concat("/");
if( now.month() < 10 ) teks_tanggal.concat(0);
teks_tanggal.concat(now.month());
teks_tanggal.concat("/");
if( now.year() < 10 ) teks_tanggal.concat(0);
teks_tanggal.concat(now.year());
return teks_tanggal;
}
// fungsi untuk menampilkan teks pada lcd sesuai format
void SetDisplay(String data, byte baris, byte format, boolean hapus){
if(hapus) lcd.clear();
int cols = data.length();
if( cols > LCD_COL) format = ALIGN_LEFT;
if(format == ALIGN_CENTER){
if(cols%2 == 1) cols++;
cols = (LCD_COL/2) - (cols/2);
}else if(format == ALIGN_RIGHT){
cols = LCD_COL - cols;
}else{
cols = 0;
}
lcd.setCursor(cols,baris);
lcd.print(data);
}
// tambahan untuk membuat delay non blocking
unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}
Program ini cukup simpel karena hanya mengombinasikan antara dasar-dasar untuk mengambil data tanggal dan jam serta dasar-dasar membuat format teks di tampilan LCD.
meteorstorepurwokerto
purwokertorobotic
Komentar
Posting Komentar