Merakit Jam Waktu Shalat Menggunakan Arduino dan P10









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
  }
}
 




1 comment

Hendra PRADANA said...

kalau untuk jam besar ukurannya 96x32 tambahan coding seperti apa ya min.... trims sebelumnya

Dicky B_Mz. Powered by Blogger.