Program Running Text P10 Arduino menampilkan jam dan text

Program Running Text P10 Arduino menampilkan jam dan text





#include <DMD.h>
#include <TimerOne.h>
#include <Wire.h>
#include <Sodaq_DS3231.h>
#include "PrayerTimes.h"
#include <SystemFont5x7.h>

#include <angka6x13.h>
#include <angka_2.h>
#include <huruf_kecilku.h>

#include <SPI.h>
char weekDay[][7] = {"SENIN" , "SELASA", "RABU", "KAMIS", "JUM'AT", "SABTU", "AHAD", "SENIN" ,  }; // array hari, dihitung mulai dari senin, hari senin angka nya =0,
long int a;
int b;
int langkah;
int lama_tampilnya;
boolean Waduh_Setting = false;

//>>>> Mendifinisikan Pin Tombol <<<<\\

#define Jam_bUP A1                          // Tombol setting sesuaikan dengan PIN di arduino anda mana  klo ini terhubung dengan PIN 3 Digital
#define tombol_bOK A2                       // Tombol OK sesuaikan dengan PIN di arduino anda mana  klo ini terhubung dengan PIN 5 Digital
#define Jam_bDN A3                          //tombol setting   sesuaikan dengan PIN di arduino anda mana  klo ini terhubung dengan PIN 4 Digital

//>>>>koding ini untuk setting rtc sesuai dengan laptop<<<<\\

//year, month, date, hour, min, sec and week-day(starts from 0 and goes to 6)
//writing any non-existent time-data may interfere with normal operation of the RTC.
//Take care of week-day also.
//DateTime dt(2017, 5, 4, 15, 11, 0, 4);

/*
   PIN YANG DISAMBUNG
   Arduino              P-10
   -D6          ->      -A
   -D7          ->      -B
   -D8          ->      -SCLK
   -D9          ->      -OE
   -D11         ->      -DATA
   -D13         ->      -CLK
   -GND         ->      -GND
*/

DMD dmd(2, 1);                              //untuk mengatur jumlah panel yang kamu pakai

double times[sizeof(TimeName) / sizeof(char*)];

void ScanDMD()
{
  dmd.scanDisplayBySPI();
}


void setup()
{

  pinMode(2, OUTPUT);                       //----pin 2 untuk alarm adzan maghrib ---hubungkan dengan buzzer

  langkah = 0;
  rtc.begin();
  //rtc.setDateTime(dt);                    //Adjust date-time as defined 'dt' above (ini untuk setting jam)
  Wire.begin();
  Timer1.initialize( 500 );
  Timer1.attachInterrupt( ScanDMD );
  dmd.clearScreen( true );

  pinMode(tombol_bOK, INPUT_PULLUP);        // Mode Pin Sebagai Input dengan Pull Up Internal
  pinMode(Jam_bUP, INPUT_PULLUP);           // Mode Pin Sebagai Input dengan Pull Up Internal
  pinMode(Jam_bDN, INPUT_PULLUP);           // Mode Pin Sebagai Input dengan Pull Up Internal

  attachInterrupt(0, Setting, FALLING);
}

//>>>>Fungsi Looping/Pengulangan <<<<\\

void loop()
{
  if (Waduh_Setting)
  {
    MenuSetting();                          // Jika Tombol OK/Interrupt ditekan maka masuk menu setting Manual
  }
  mulai();
}


//>>>> Interrupt Button Setting <<<<\\

void Setting()
{
  Waduh_Setting = true;                     // Aktifkan Menu Setting
}

//>>>> Fungsi Menu Setting <<<<\\

void MenuSetting()
{
  DateTime now = rtc.now();
  String Teks;
  int tgl = now.date();                     //Tanggal
  int bln = now.month();                    //Bulan
  int thn = now.year();                     //Tahun
  int hours, minutes;                       //jam dan menit jawdwal sholat
  int jame = now.hour();                    //jam
  int menit_e = now.minute();               //menit
  int detik_e = now.second();               //detik
  int harin_e = harin_e;                    //hari
  detachInterrupt(0);                       // Matikan interrupt "0"
  delay(500);

  //>>>> Setting Jam & Menit <<<<\\

  int kasus = 0;
  setTimes:                                 // Setting Times (Jam & Menit)
  if (digitalRead(Jam_bUP) == LOW)          // Tombol Setting Menit
  {
    delay(10); menit_e++;                   // Delay Tombol & Tambah Nilai Menit
    if (menit_e >= 60)
    {
      menit_e = 0;                          // Batas Nilai Menit Lebih dari 59 Kembali ke 0
    }
    while (digitalRead(Jam_bUP) == LOW) {}  // Kunci Tombol Setting Menit Sampai Lepas Tombol
  }
  if (digitalRead(Jam_bDN) == LOW)          // Tombol Setting Menit
  {   
    delay(10); jame++;                      // Delay Tombol & Tambah Nilai Jam
    if (jame >= 24)
    {
      jame = 0;                             // Batas Nilai Jam Lebih dari 23 Kembali ke 0
    }
    while (digitalRead(Jam_bDN) == LOW) {}  // Kunci Tombol Setting Jam Sampai Lepas Tombol
  }



setTgl:                                     // Setting tanggal
  if (digitalRead(Jam_bUP) == LOW )         // Tombol Setting tanggal
  {   
    delay(10); tgl++;
    if (tgl >= 32)
    {
      tgl = 1;                              // Batas Nilai tgl Lebih dari 31 Kembali ke 1
    }
    while (digitalRead(Jam_bUP) == LOW) {}  // Kunci Tombol Setting tgl Sampai Lepas Tombol
  }
  if (digitalRead(Jam_bDN) == LOW)          // Tombol Setting bln
  {                           
    delay(10); bln++;                       // Delay Tombol & Tambah Nilai bln
    if (bln >= 13)
    {
      bln = 1;                              // Batas Nilai bln Lebih dari 12 Kembali ke 1
    }
    while (digitalRead(Jam_bDN) == LOW) {}  // Kunci Tombol Setting blnSampai Lepas Tombol
  }

  //>>>>setting thn<<<<\\

setThn:                                     // Setting thn
  if (digitalRead(Jam_bUP) == LOW )         // Tombol Setting thn
  {
    delay(10); thn++;                       // Delay Tombol & Tambah Nilai thn
    if (thn >= 9999)
    {
      thn = 0;                              // Batas Nilai Menit Lebih dari 9999 Kembali ke 0
    }
    while (digitalRead(Jam_bUP) == LOW) {}  // Kunci Tombol Setting thn Sampai Lepas Tombol
  }
  if (digitalRead(Jam_bDN) == LOW)          // Tombol Setting thn
  {
    delay(10); thn--;                       // Delay Tombol & Tambah Nilai thn
    if (thn <= 0)
    {
      thn = 0;                              // Batas Nilai kurang dari 0 Kembali ke 0
    }
    while (digitalRead(Jam_bDN) == LOW) {}  // Kunci Tombol Setting thn Sampai Lepas Tombol
  }

  //>>>>setting Hari<<<<\\

  //hitungan hari mulai dari 0,1,2,3,4,5,6 = senin, selasa, rabu, kamis, jumat, sabtu, minggu

setHari:                                    // Setting Times hari
  if (digitalRead(Jam_bUP) == LOW )         // Tombol Setting hari
  {
    harin_e = harin_e;
    delay(10);
    harin_e++;                              // Delay Tombol & Tambah Nilai hari,
    if (harin_e >= 7)
    {
      harin_e = 0;                          // Batas Nilai Menit Lebih dari 6 Kembali ke 0
    }
    while (digitalRead(Jam_bUP) == LOW) {}  // Kunci Tombol Setting hariSampai Lepas Tombol
  }
  if (digitalRead(Jam_bDN) == LOW)          // Tombol Setting hari
  {
    harin_e = harin_e;
    delay(10);
    harin_e--;                              // Delay Tombol & Tambah Nilai hari
    if (harin_e <= 0)
    {
      harin_e = 0;                          // Batas Nilai kurang dari 0 Kembali ke 0
    }
    while (digitalRead(Jam_bDN) == LOW) {}  // Kunci Tombol Setting hari Sampai Lepas Tombol
  }

  //>>>> Tombol OKE <<<<\\

  if (digitalRead(tombol_bOK) == LOW)       // Tombol Selesai Setting
  {
    kasus = kasus + 1;
    dmd.clearScreen(true);                  // Hapus Tampilan P10
    DateTime dt(thn, bln, tgl, jame, menit_e, now.second(), harin_e);

    // DateTime dt(2017, 5, 4, 15, 11, 0, 4);

    rtc.setDateTime(dt);                    //Adjust date-time as defined 'dt' above
    while (digitalRead(tombol_bOK) == LOW) {}
    delay(500);

   //>>>> kasus-kasus <<<<\\

  }
  if (kasus == 1)                           //kasus seting jam
  {
    dmd.clearScreen(true);
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(0, 0, "set-J", 5, 0);
    String xjam = Konversi(jame) + ":" + Konversi(menit_e) ;
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.drawString(0, 9, sjam, pjg, 0);
    delay (100);
    goto setTimes;                          //lari ke fungsi seting jam
  }

  if (kasus == 2)                           //kasus seting tanggal
  {
    dmd.clearScreen(true);
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(0, 0, "Tgl", 3, 0);
    String xjam = Konversi(tgl) + "/" + Konversi(bln) ;
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.drawString(0, 9, sjam, pjg, 0);
    delay (100);
    goto setTgl;                            //lari ke fungsi setting tanggal
  }

  if (kasus == 3)                           ///kasus seting tahun
  {
    dmd.clearScreen(true);
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(0, 0, "Thn", 3, 0);
    String xjam = Konversi(thn)  ;
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.drawString(0, 9, sjam, pjg, 0);
    delay (100);
    goto setThn;                            //lari ke fungsi setting tahun
  }

  if (kasus == 4)                           //kasus seting hari
  {
    dmd.clearScreen(true);
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(0, 0, "Hari", 4, 0);
    String xjam = Konversi(harin_e)  ;
    if (harin_e == 0)
    {
      xjam = "SEN";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 1)
    {
      xjam = "SEL";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 2)
    {
      xjam = "RAB";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 3)
    {
      xjam = "KAM";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 4)
    {
      xjam = "JUM";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 5)
    {
      xjam = "SAB";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }

    if (harin_e == 6)
    {
      xjam = "MIN";
      int pjg = xjam.length() + 1;
      char sjam[pjg];
      xjam.toCharArray(sjam, pjg);
      dmd.drawString(0, 9, sjam, pjg, 0);
    }
    delay (100);
    goto setHari;                           //lari ke seting hari
  }


  if (kasus == 5)                           //kasus wis Rampung
  {
    dmd.clearScreen(true);
    goto endSetting;
    delay(500);
  }

endSetting:                                 // Label End Setting
  attachInterrupt(0, Setting, FALLING);     // Interrupt Tombol OK
  Waduh_Setting = false;

  kasus = 0;
}

//>>>> Program Jam <<<<\\

int menite = 1;                             ///waktu iqomah lamanya
void mulai()
{
  dmd.clearScreen( true );
  long mulai = millis();
  while (millis() - mulai < 1)
  {
    DateTime now = rtc.now();
    String Teks;

    //>>>> pengaturan koordinat-gunakan gps android untuk menentukan posisi anda <<<<\\

    double lintang = -7.0667;               //Latitude
    double bujur = 110.4;                   //Longitude
    int Z = 7 ;                             //Zona Waktu GMT WIB biasanya 7
    int tgl = now.date();                   //Tanggal
    int bln = now.month();                  //Bulan
    int thn = now.year();                   //Tahun
    int hours, minutes;                     //jam sholat dan  menit sholat
    long mulai = millis();

    set_calc_method(ISNA);                  //Methode perhitungan mengikuti ISNA
    set_asr_method(Shafii);                 //Pendapat Imam Syafi'i
    set_high_lats_adjust_method(AngleBased);
    set_fajr_angle(20);                     //Sudut Waktu Subuh
    set_isha_angle(18);                     //Sudut Waktu Isya
    get_prayer_times(thn, bln, tgl, lintang, bujur, Z, times);


    //>>>> TOMBOL SET JAM <<<<<\\
    if (digitalRead(tombol_bOK) == LOW)
    {
      MenuSetting();                        // Jika Tombol OK/Interrupt ditekan maka masuk menu setting Manual
    }
  }

  //dmd.clearScreen( true );
  while (millis() - mulai < 20000)
  {
    DateTime now = rtc.now();
    String Teks;
    int tgl = now.date();                   //Tanggal
    int bln = now.month();                  //Bulan
    int thn = now.year();                   //Tahun
    // int hours, minutes;                  //jam dan menit jawdwal sholat
    int jame = now.hour();                  //jam
    int menit_e = now.minute();             //menit
    int detik_e = now.second();             //detik
    int harin_e = harin_e;                  //hari
    delay(100);
    detachInterrupt(0);                     // Matikan interrupt "0"



    String xjam = Konversi(now.hour()) + ";" + Konversi(now.minute()) + ";" + Konversi(now.second()); //tampilan jam
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.selectFont(angka_2);
    dmd.drawString(7, 0, sjam, pjg, 0);

    Teks =" Warung Kopi-ku..... Free Wifi !!!" ;                     //tampilkan hari
    int kecepatan;
    kecepatan = 35;                         //kecepatan runing teks
    int pj = Teks.length() + 1;
    char tampil[pj];
    Teks.toCharArray(tampil, pj);
    dmd.selectFont(SystemFont5x7);
    dmd.drawMarquee(tampil, pj, 64, 9);



    long timer = millis();
    boolean ret = false;
    while (!ret)
    {
      if ((timer + kecepatan) < millis())
      {
        ret = dmd.stepSplitMarquee(8, 15, 0); //dianimasikan baris 8 sampai 15, sampai kolom 0
        timer = millis();

        //>>>> TOMBOL SET JAM <<<<\\
   
        if (digitalRead(tombol_bOK) == LOW)
        {
          MenuSetting(); // Jika Tombol OK/Interrupt ditekan maka masuk menu setting Manual
        }
      }
    }
  }

  while (millis() - mulai < 30000)
  {
    DateTime now = rtc.now();
    String hariku = Konversi(now.date()) + "/" + Konversi(now.month()) + "/" + Konversi(now.year()) + " "; //tampilan tanggal
    int dowo = hariku.length() + 1;
    char detikanku[dowo];
    hariku.toCharArray(detikanku, dowo);
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(2, 9, detikanku, dowo, 0);
    String xjam = Konversi(now.hour()) + ";" + Konversi(now.minute()) + ";" + Konversi(now.second()); //tampilan jam
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.selectFont(angka_2);
    dmd.drawString(7, 0, sjam, pjg, 0);
  }
}

//>>>> konversi angka agar ada nol didepannya jika diawah 10 <<<<\\

String Konversi(int sInput)
{
  if (sInput < 10)
  {
    return"0" + String(sInput);
  }
  else
  {
    return String(sInput);
  }
}

Komentar

Posting Komentar

Postingan populer dari blog ini

Cara menambahkan Library DMD ke Arduino IDE

Cara membuat running text P10 dengan menggunakan Arduino Uno