

Program Utama
=================================Source Code================================
/*-------------------------------------------------------------------------------------------------
* Project : Jam Digital P10 32x16 Dengan bmz_Setting Tombol ///////////////////
* Author : Dicky B_mz ///////////////////
* Website : www.dickybmz.com ///////////////////
* Copyright 2017 Dicky_Bmz ///////////////////
* ///////////////////
* CHANGELOG ///////////////////
* > 14 October 2018 ///////////////////
------------------------------------------------------------------------------------------------*/
///////////////////////////////// Menyertakan File Library ////////////////////////////////////////
#include "SPI.h" // SPI Library
#include "TimerOne.h" // Timer1 Library
#include "DMD.h" // DMD Library
#include "RTClib.h" // Real Time Clock Library
#include "BigNumber.h" // Font Libary
#include "System6x7.h" // Font Libary
#include "IRremote.h"
#include "IRremoteInt.h"
///////////////////////////////// Mendifinisikan Pin Tombol ////////////////////////////////////////
#define Tombol_Up 3 // Tombol Atas
#define Tombol_OK 2 // Tombol OK
#define Tombol_Dwn 4 // Tombol Bawah
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
////////////////////////////////////// bmz_Setting Varible /////////////////////////////////////////////
int textSpeed = 100;
/////////////////////////////////////// Global Varible /////////////////////////////////////////////
int Hari,Tanggal,Bulan,Tahun,Jam,Menit,Detik;
int detik;
int s,i,x;
int buzzer = A0;
char bmz_dmdBuff[10];
String bmz_sBuff;
double old;
boolean bmz_MiniTTK = false;
boolean bmz_BigTTK = false;
boolean bmz_Setting = false;
RTC_DS3231 bmz_RTC;
DMD bmz_DMD(1,1);
//////////////////////////////////////// Fungsi Setup //////////////////////////////////////////////
void setup() {
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, HIGH);
delay(1000);
digitalWrite(buzzer, LOW);
bmz_RTC.begin(); // Initialize RTC Modul
Serial.begin(9600); // Initialize Komunikasi Serial
Timer1.initialize(2000); // Initialize Timer 1
Timer1.attachInterrupt(ScanDMD); // Interrupts Timer 1
bmz_DMD.clearScreen(true); // Hapus Tampilan P10
bmz_DMD.drawBox( 0, 15, (32*DISPLAYS_ACROSS)-1, (16*DISPLAYS_DOWN)-1, GRAPHICS_NORMAL );
pinMode(Tombol_OK,INPUT_PULLUP); // Mode Pin Sebagai Input dengan Pull Up Internal
pinMode(Tombol_Up,INPUT_PULLUP); // Mode Pin Sebagai Input dengan Pull Up Internal
pinMode(Tombol_Dwn,INPUT_PULLUP); // Mode Pin Sebagai Input dengan Pull Up Internal
attachInterrupt(0,Setting,FALLING); // Intterupt Tombol bmz_Settingan
}
////////////////////////////////// Fungsi Looping/Pengulagan ///////////////////////////////////////
void loop() {
if(bmz_Setting){MenuSetting();} // Jika Tombol OK/Interrupt ditekan maka masuk menu bmz_Setting Manual
BigJam(); // Baca Fungsi BigJam
}
////////////////////////////////////// Interrupt Timer 1 ///////////////////////////////////////////
void ScanDMD() {
bmz_DMD.scanDisplayBySPI(); // Timer Scanning untuk P10
if(bmz_MiniTTK){ // Fungsi aktifkan Mini Titik pada interrupt
if((millis() > (old+500))) {
bmz_DMD.drawChar( 15, 0, ':', GRAPHICS_OR);
}
if((millis() < (old+1000)) && (millis()>(old+500))) {
bmz_DMD.drawChar( 15, 0, ':', GRAPHICS_NOR);
}
if(millis() > (old+1000) ) {old=millis();}
}
if(bmz_BigTTK){ // Fungsi aktifkan Big Titik pada interrupt
if((millis() > (old+500))) {
bmz_DMD.drawFilledBox( 15, 4, 16, 5, GRAPHICS_OR );
bmz_DMD.drawFilledBox( 15, 10, 16, 11, GRAPHICS_OR );
}
if(( millis() < (old+1000)) && (millis() > (old+500))) {
bmz_DMD.drawFilledBox( 15, 4, 16, 5, GRAPHICS_NOR );
bmz_DMD.drawFilledBox( 15, 10, 16, 11, GRAPHICS_NOR );
}
if(millis() > (old+1000) ) {
old=millis();
}
}
}
/////////////////////////////////// Interrupt Button bmz_Setting ////////////////////////////////////////
void Setting() {
bmz_Setting = true; // Aktifkan Menu bmz_Setting
}
//////////////////////////////////// Fungsi Tampil Jam Besar ////////////////////////////////////////
void BigJam() {
DateTime now = bmz_RTC.now(); // Baca Data RTC Sekarang
bmz_MiniTTK = false; // Mini Titik Mati
bmz_BigTTK = true; // Big Titik Aktif
bmz_DMD.selectFont(BigNumber); // Font Select "BigNumber"
// Display JAM
bmz_sBuff = bmz_Convert(now.hour()); // Covert Int to String Jam
s = bmz_sBuff.length()+1; // Panjang Karakter String
bmz_dmdBuff[s]; // Deklarasi variable Array
bmz_sBuff.toCharArray(bmz_dmdBuff,s); // Conver String to Char Array
bmz_DMD.drawString(1,0,bmz_dmdBuff,s,0); // Tampilkan Nilai Char Array pada P10
// Display Menit
bmz_sBuff = bmz_Convert(now.minute()); // Covert Int to String Menit
s = bmz_sBuff.length()+1; // Panjang Karakter String
bmz_dmdBuff[s]; // Deklarasi variable Array
bmz_sBuff.toCharArray(bmz_dmdBuff,s); // Conver String to Char Array
bmz_DMD.drawString(18,0,bmz_dmdBuff,s,0); // Tampilkan Nilai Char Array pada P10
bmz_DMD.drawString(0,15, "....",4, GRAPHICS_NORMAL );
}
////////////////////////////////////// Fungsi Menu bmz_Setting //////////////////////////////////////////
void MenuSetting() {
DateTime now = bmz_RTC.now(); // Baca Data RTC Sekarang
Tanggal = now.day(); // Singkron Variable Tanggal dengan RTC
Bulan = now.month(); // Singkron Variable Bulan dengan RTC
Tahun = now.year(); // Singkron Variable Tahun dengan RTC
Jam = now.hour(); // Singkron Variable Jam dengan RTC
Menit = now.minute(); // Singkron Variable Menit dengan RTC
detik = now.second();
bmz_MiniTTK = false; // Mini Titik Mati
bmz_BigTTK = false; // Big Titik Mati
bmz_DMD.selectFont(System6x7); // Font Select "BigNumber"
bmz_DMD.clearScreen(true); // Hapus Tampilan P10
detachInterrupt(0); // Matikan interrupt "0"
delay(500); // Delay 500ms
/////////////////////////////////////// bmz_Setting Jam & Menit //////////////////////////////////////////
setTimes: // bmz_Setting Times (Jam & Menit)
if(digitalRead(Tombol_Up) == LOW) { // Tombol bmz_Setting Menit
delay(10); Menit++; detik=00; // Delay Tombol & Tambah Nilai Menit
if(Menit >= 60){Menit = 0;} // Batas Nilai Menit Lebih dari 59 Kembali ke 0
while(digitalRead(Tombol_Up) == LOW) {} // Kunci Tombol bmz_Setting Menit Sampai Lepas Tombol
}
if(digitalRead(Tombol_Dwn) == LOW) { // Tombol bmz_Setting Menit
delay(10); Jam++; detik=00; // Delay Tombol & Tambah Nilai Jam
if(Jam >= 24){Jam = 0;} // Batas Nilai Jam Lebih dari 23 Kembali ke 0
while(digitalRead(Tombol_Dwn) == LOW) {} // Kunci Tombol bmz_Setting Jam Sampai Lepas Tombol
}
if(digitalRead(Tombol_OK) == LOW) { // Tombol Selesai bmz_Setting
bmz_DMD.clearScreen(true); // Hapus Tampilan P10
bmz_RTC.adjust(DateTime(now.year(), now.month(), now.day(), // bmz_Setting Nilai RTC Module
Jam, Menit, now.second()));
while(digitalRead(Tombol_OK) == LOW) {} // Kunci Tombol OK Sampai Lepas Tombol
delay(500); // Delay Tombol
goto endbmz_Setting; // Pergi ke Label setTglBln
}
bmz_DMD.drawString(3,0,"TIME",4,0); // Tampilkan String "TIME" Pada P10
bmz_DMD.drawChar( 15, 8, ':', GRAPHICS_OR); // Tampilkan Char ':' Pada P10
// Display JAM
bmz_sBuff = bmz_Convert(Jam); // Covert Int to String Jam
s = bmz_sBuff.length()+1; // Panjang Karakter String
bmz_dmdBuff[s]; // Deklarasi variable Array
bmz_sBuff.toCharArray(bmz_dmdBuff,s); // Conver String to Char Array
bmz_DMD.drawString(1,8,bmz_dmdBuff,s,0); // Tampilkan Nilai Char Array pada P10
// Display Menit
bmz_sBuff = bmz_Convert(Menit); // Covert Int to String Menit
s = bmz_sBuff.length()+1; // Panjang Karakter String
bmz_dmdBuff[s]; // Deklarasi variable Array
bmz_sBuff.toCharArray(bmz_dmdBuff,s); // Conver String to Char Array
bmz_DMD.drawString(18,8,bmz_dmdBuff,s,0); // Tampilkan Nilai Char Array pada P10
goto setTimes; // Pergi ke Label setTimes
endbmz_Setting: // Label End bmz_Setting
attachInterrupt(0,Setting,FALLING); // Interrupt Tombol OK
bmz_Setting = false; // Akhiri bmz_Setting Menu
}
///////////////////////////////////// Fungsi Convert 2 Digit ///////////////////////////////////////
String bmz_Convert(int Num){ // Variable String Convert nilai Int
if(Num < 10){ // Jika Num kurang dari 10
return "0"+String(Num); // Tambahkan Angka '0' diawal variable, dan convert String
}
else{ // Jika Num lebih dari 10
return String(Num); // Convert String
}
}
13>
1 comment
kalau untuk jam besar ukurannya 96x32 tambahan coding seperti apa ya min.... trims sebelumnya
Post a Comment