Jadwal Waktu Shalat (JWS) 2 & 3 Panel P10 Arduino Uno dengan kontroller Android melalui Bluetooth

Rancangan displai jadwal waktu sholat / JWS menggunakan arduino ini memanfaatkan I2C EEPROM 24C32 sebagai penyimpan data tampilan Infomasi text yang mampu menampung 4096 karakter. Chip 24C32 umumnya disertakan pada modul RTC DS1307 / DS3231 dengan jalur komunikasi yang sama dan alamat yang berbeda. Karena komunikasi I2C dikategorikan lambat, maka akses pembacaan memori ini diminimalisir dengan metode read on demand.

Display Jadwal Sholat Arduino

Perancangan JWS menggunakan Arduino atau JWS dengan kontroller running text harus mampu menangani hal-hal berikut :

  1. Waktu sholat berdasarkan perjalanan matahari yang berubah-ubah sepanjang tahun, sehingga dibutuhkan perhitungan khusus untuk menentukan posisi matahari secara matematis. Formula yang digunakan berasal dari islamicity, dengan penambahan variabel sudut-sudut matahari.
  2. Pengaturan yang komplek namun fleksibel mengharuskan JWS didesain mampu menyesuaikan tugasnya dengan beberapa parameter yang bisa di monitor atau diganti berkala. Seperti adanya kegiatan-kegiatan khusus sehingga JWS bisa beralih fungsi.

Kapasitas memory flash arduino uno (ATMega328) yang 32Kb masih menyisakan ruang untuk 3 set font diamping 1 font angka. Font-font ini berfungsi memberikan efek tulisan sehingga memungkinkan adanya penekanan informasi.

Efek JWS Arduino

Efek-efek tampilan diperlukan supaya kehadiran JWS lebih menghiasi dinding, bukan hanya sebagai papan informasi. efek yang di tambahkan :

  1. Wipe in – wipe out
  2. Marque
  3. Lukis gambar

JWS Bluetooth

Fasilitas pengaturan JWS dengan bluetooth:

  1. 10 teks informasi yang disimpan dalam memory 24C32 yang mampu menyimpan 4096 karakter.
  2. Font informasi bisa diatur terpisah (System Font 5×7,Arial 14,Arial Black 16) pada uno, dan bisa ditambahkan pada board yang memiliki memori lebih besar.
  3. Waktu padam dan nyala.
  4. Perhitungan waktu sholat dengan metode sudut matahari.
  5. Tampilan tanggal hijriah (bisa diatur dan dinonaktifkan).
  6. Efek wipe untuk tampilan waktu-waktu sholat.
  7. Efek tulisan gambar.
  8. Pengaturan bluetooth meliputi kecerahan DMD panel, kecepatan scroll.
  9. Token aplikasi apk, untuk mengantisipasi apabila ada komunikasi bluetooth yang tidak diinginkan yang mungkin akan merubah setting.
  10. Konfirmasi data setting diterima dan waktu padam/nyala ke apk android.
  11. Data yang diketik di apk disimpan dalam database android, jadi saat aplikasi ditutup data yang diketik tetap akan tampil saat aplikasi dibuka kembali.

Komponen yang digunakan dalam JWS Arduino bluetooth:

  1. Arduino Uno (Gunakan Arduino mega untuk memory yang lebih besar).
  2. RTC DS3231 (termasuk 24C32) kompatibel DS1307 (beda address)
  3. Bluetooth HC-05
  4. Panel P10 (2 panel)

Jika ingin upload sketch dari arduino ide, lepaskan dahulu pin ‘0’ / pin RX jika menggunakan bluetooth hardware serial.

Skema arduino JWS bluetooth:

Video bluetooth arduino JWS:

 

JWS Android

Screenshoot JWS Android bluetooth:

JWS bluetooth android ini menggunakan hardware SPI sebagai pengirim data ke running text, meskipun mengorbankan pin 12 (MISO) yang tidak bisa digunakan karena dikontrol oleh SPI.

Pengaturan JWS dengan arduino yang dibutuhkan :

  1. #define modeDemo pada baris atas digunakan jika ingin menjalankan JWS demo, hapus baris ini jika JWS digunakan normal.
  2. Pin Kontrol DMD hardware SPI : pinOE  harus dipasangkan pada pin PWM sebagai pengatur kecerahan. Sedangkan pinA, pinB, dan pinSCK bisa ditempatkan dimana saja.
  3. Jumlah panel.
  4. Perancangan ini dibuat dengan DS3231, jika menggunakan DS1307 harap diganti bagian alamat I2C-nya.
  5. Pin SQW (DS3231) diset sebagai penghasil pulsa dengan frekuensi 1 HZ sebagai interupsi bagi JWS bahwa detik telah berubah. dalam perancangan JWS arduino ini dihubungkan ke pin A3 namun bisa dipindahkan kemana saja.
  6. Jenis font bisa disesuaikan dengan kebutuhan, (#include-kan juga library font-nya). dengan merubah variabel berikut:
    #define fontWaktu               angka6x13
    #define fontInformasi           SystemFont5x7Ramping
    #define fontTanggal             SystemFont5x7Ramping
    #define fontNamaSholat          SystemFont5x7Ramping
    #define fontWaktuSholat         SystemFont5x7Ramping
    #define fontWaktuMasuk          SystemFont5x7Ramping
    #define fontAdzan               SystemFont5x7Ramping
    #define fontIqomah              SystemFont5x7Ramping
    #define fontMatikanHP           Arial14
    
  7. JWS ini dilengkapi sistem token, untuk RTC dan komunikasi bluetooth, apabila token yang digunakan cocok maka perintah untuk RTC dan bluetooth (setting variabel) akan dijalankan.

Sketch/koding header dan setup android bluetooth JWS:

#define modeDemo                0    //<<==================================== DEMO prinsip kerja 0 / 1

#define selisihImsak            10

//defenisi pin
#define pinA                    6
#define pinB                    7
#define pinOE                   9
#define pinSCK                  8

#define alarm                   5
#define RTCDetikIRQ             A3

//variabel Setting
#define jumlahKolomPanel        2  //panel
#define jumlahBarisPanel        1  //panel

#define lamaTampilWaktuSholat   10 // * 100 milidetik
#define lamaTampilInformasiJam  100 // * 100 milidetik

#define fontWaktu               angka6x13
#define fontInformasi           SystemFont5x7Ramping
#define fontTanggal             SystemFont5x7Ramping
#define fontJadwalSholat        SystemFont5x7Ramping
#define fontWaktuSholat         SystemFont5x7Ramping
#define fontWaktuMasuk          SystemFont5x7Ramping
#define fontAdzan               SystemFont5x7Ramping
#define fontIqomah              SystemFont5x7Ramping
#define fontMatikanHP           Arial14

#define RTC_ADDRESS             0x68
#define I2CEEPROM_ADDRESS       0x57  //Perhatikan alamat I2CEEPROM 0x50(ds1307 .. 0x57(ds3231)
#define RTC_CONTROL_REG         0x0E  //0x07 ds1307, 0x0E ds3231 


#include <Wire.h>
#include <SPI.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>

#include <DMD2.h>

#include "fungsi.h"
#include "definisi.h"
#include "konstanta.h"
#include "rtc.h"
#include "prayer.h"
#include "i2cUmum.h"
#include "trigonometri.h"

#include <fonts/SystemFont5x7Ramping.h>
#include <fonts/Arial14.h>
#include <fonts/Arial_Black_16.h>
#include <fonts/angka6x13.h>
#include <fonts/AllahMuhammad.h>

const uint16_t alamatFont[] = {&SystemFont5x7Ramping, &Arial14, &Arial_Black_16};

struct Setting
{
  int8_t koreksiHijriah;
  int8_t jumlahAlarm;
  int8_t lamaAdzan;
  int8_t lamaIqomah[5];
  int8_t ulangMatikanHP;
  int8_t lamaSholat[5];
  int8_t lamaSholatJumat;
  int8_t kecepatanJalanInfoText;
  int8_t kecerahanJWS;
  int8_t padamJam;
  int8_t padamMenit;
  int8_t nyalaJam;
  int8_t nyalaMenit;
  int8_t tampilanHijriah;
  int8_t tampilanImsak;
  int8_t tampilanTerbit;
  int8_t tampilanDhuha;
  int8_t tampilanTerbenam;
  int8_t JumlahInfoTextAktif;
};

#if modeDemo
  Setting setting = {0, 5, 1, {5, 5, 5, 5, 5}, 1, {5, 5, 5, 5, 5}, 2, 50, 20, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1};
  char namaMesjid[panjangString] = "Musholla ...\0   ";
#else
  Setting setting;
  char namaMesjid[panjangString];
#endif

//variabel
const char strWaktu[] PROGMEM = "Waktu";
const char strSholat[] PROGMEM = "Sholat";
char strWaktuInformasi[9];
JamDanMenit waktuSholat[9];

EfekMarqueHorizontalkeKiri marqueKiri;
EfekTulis efekTulis;
uint8_t efekScrollOutDanWipeIn;

uint8_t marqueOut;
bool marqueTampilan;
uint8_t wipeInTampilan;
uint8_t wipeOutTampilan;
uint8_t efekTulisTampilan;


uint8_t indexNamaSholat;
uint16_t hitungMundurSholat;
uint16_t hitungMundurPesanSebelumSholat;
uint16_t hitungMundurIqomah;
uint16_t hitungMundurAdzan;
uint8_t hitungMundurAlarm;
uint16_t hitungMudurAlarmIqomah;

byte modeOperasi;
byte modeOperasiSebelumnya;

uint8_t menitSebelumnya = 60;
uint8_t hariSebelumnya = 32;

bool statusAlarm;

bool tampilkanMenit;
bool infoWaktu;
byte infoWaktuTop;
uint16_t lamaTampil = 0;
uint16_t indekTampilan;

char textWaktuJam[6];
char textTanggalHijriah[sizeof(strNamaHari[0]) + 2 + 3 + sizeof(strNamaBulanHijriah[0]) + 3 - 2];

uint8_t bluetoothData[32];
uint16_t indexParseSerial = 0;

byte indexInformasi = 1;
long mulaiMillis;
uint16_t AlamatI2CEEPROM;

int8_t indexSetting = 0;
byte indexSettingInfo;
bool tokenValid = false;
bool RTCValid = true;

byte tanggalHijriah;
byte bulanHijriah;
uint16_t tahunHijriah;

uint16_t AlamatI2CEEPROMSebelumnya;
bool nextEEPROMData = false;
byte EEPROMDataCounter;

bool modeSambungSebelumnya = false;

tanggalDanWaktu now;
tanggalDanWaktu settingWaktu;
byte settingWaktuIndex;

//Class variabel
#define l jumlahKolomPanel * 32
#define t jumlahBarisPanel * 16
SPIDMD dmd(jumlahKolomPanel, jumlahBarisPanel, pinOE, pinA, pinB, pinSCK);
DMDFrame dmdEfek(l, t);

DMD_TextBox boxKolom1(dmd, 0, 0, l / 2, t);
DMD_TextBox boxKolom2(dmd, l / 2, 0, l / 2, t);
DMD_TextBox boxBaris1(dmd, 0, 0, l, (t / 2) - 1);
DMD_TextBox boxBaris2(dmd, 0, t / 2, l, t / 2);

DMD_TextBox boxKolom2Baris1(dmd, l / 2, 0, l / 2, t / 2);
DMD_TextBox boxKolom2Baris2(dmd, l / 2, t / 2, l / 2, t / 2);

//Eeprom24C32_64 I2CEEPROM(EEPROM_ADDRESS);
HardwareSerial *bluetooth;

#define tokenRTC 0xA9
#define tokenBluetooth 0x4C
#define tokenSetInformasi "225654"
#define tokenSetSetting "963215"

void setup() {
  Serial.begin(9600);
  Serial.println("JWS Bluetooth");
  Serial.println("http://www.semesin.com/project/");
  Serial.println();

  bluetooth = &Serial;

  pinMode(alarm, OUTPUT);
  pinMode(RTCDetikIRQ, INPUT_PULLUP);

  //Interupsi setiap 1 detik
  Wire.begin();
  Wire.beginTransmission(RTC_ADDRESS);
  Wire.write(RTC_CONTROL_REG);
  Wire.write(0x00);//SQW freq, 1Hz
  Wire.endTransmission();

#if modeDemo
  prayerData = { -1576, 27343, 1792, 5120, 213, -1152, 1024, 4608, 0, 0, 0,0,0};
  settingWaktu = {50, 29, 4, 5, 7, 5, 2018};
  simpanRTC(RTC_ADDRESS, settingWaktu);
#endif

  if (EEPROM.read(alamatTokenRTC) != tokenRTC)
  {
    //Waktu compiler
    char Month[12];
    int Day, Year;
    uint8_t monthIndex;
    int Hour, Min, Sec;
    char *monthName[12] = {
      "Jan", "Feb", "Mar", "Apr", "May", "Jun",
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
    };
    sscanf(__TIME__, "%d:%d:%d", &Hour, &Min, &Sec);
    sscanf(__DATE__, "%s %d %d", Month, &Day, &Year);
    for (monthIndex = 0; monthIndex < 12; monthIndex++) {
      if (strcmp(Month, monthName[monthIndex]) == 0) break;
    }
    uint8_t wday = hariDariTanggal(Day, monthIndex + 1, Year);
    settingWaktu = {Sec, Min, Hour, wday, Day, monthIndex + 1, Year};
    simpanRTC(RTC_ADDRESS, settingWaktu);
    EEPROM.write(alamatTokenRTC, tokenRTC);
  }

#if !modeDemo
  if (EEPROM.read(alamatTokenBluetooth) == tokenBluetooth)
  {
    ambilSetting();
  }
#endif
  ambilHijriah();
  dmd.begin();

  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_enable();

  mulaiMillis = millis();
  modeOperasi = tampilWaktuSholat;

  while (!digitalRead(RTCDetikIRQ));
}

 

File-file yang digunakan dalam JWS android :

  1. definisi.h
  2. fungsi.h
  3. i2cUmum.h
  4. JWS_Semesin.ino
  5. konstanta.h
  6. prayer.h
  7. rtc.h
  8. trigonometri.h
  9. JWS_Bluetooth.apk
  10. file lengkap (.zip)

Rekomendasi Perakitan JWS Bluetooth Android:

  1. unzip JWS Bluetooth + apk – Semesin.zip (adalah folder sketch arduino beserta file pendukung dalam satu folder)
  2. copy isi folder libraries ke Document/Arduino/libraries/
  3. Buka JWS_Semesin.ino dengan arduino IDE (pengujian dengan versi 1.8.5)
  4. Lepas tx Bluetooth
  5. Upload ke arduino
  6. Hubungkan tx Bluetooth
  7. Buka app JWS Bluetooth klik setting dan kirim pengaturan
  8. Selesai.

antisipasi masalah:

  1. Data EEPROM sebelumnya mungkin berpengaruh pada settingan, set dengan apk via bluetooth atau hapus dahulu dengan examples->EEPROM->eeprom_clear.
  2. #define modeDemo 1 untuk test / 0 untuk running
  3. Pastikan daya mencukupi (kalo tidak punya 5V > 5A hubungkan saja GND DMD ke GND Arduino tapi tidak Vcc +5V-nya)

nb: V1.0 -> Versi2.0

  1. Karakter informasi yang akan ditampilkan langsung diambil dari I2CEEPROM
  2. Penambahan pengaturan sudut-sudut waktu sholat.
  3. Penambahan efek grafis

catatan:

  • koordinat dalam mode derajat-menit –±dd° mm’–(menit = pecahan derajat*60/100)
    contohnya :
    lintang -6.78 -> -6-46′
    bujur 110.38 -> 110-22′
  • jika koordinat sudah sesuai, namun masih ada perbedaan waktu dengan jadwal yang diinginkan (mis: jadwal depag), maka geser bujur (ditambah/dikurang)
  • Jika sebagian jadwal shalat tidak akurat, maka geser derajat masing-masing jadwal shalat yang belum akurat
  • JWS ini belum menggunakan ikhtiyath, untuk mengantisipasinya bisa dengan menggeser derajat-menit bujur ±2 menit)

Hasil percobaan

by: Priadi Amfi

Hasil percobaan

by: Catur cahya

Hasil percobaan

by: Ochoy Thea

Bagikan Link halaman ini :

289 thoughts on “Jadwal Waktu Shalat (JWS) 2 & 3 Panel P10 Arduino Uno dengan kontroller Android melalui Bluetooth

  1. Kalau saya jadikan 4 panel p10 apa saja yang harus saya ganti di koding nya mas saya sudah coba tapi tampilannya kacau mohon pencerahannya mas

  2. bang mau tanya kalaw tulisannya led berjalan 1 per 1 itu gmana ya? dari atas ke bawah & ke samping membentuk kata atau kalimat,..
    mohon penjelasannya…

  3. Assalamualaikum Kang Asep,saya ingin sekali rakit buat mesjid di kampung saya,nanti tolong dibimbing ya kalau part nya sudah terkumpul,tinggal BT sm P10 nya saja

    oia kalau kodenya apakah bisa request???

    *misal
    -t1 animasi full di tampilan awal
    -t2 jam di atas + running text di bawah

    1. ganti fungsi tampilInformasiWaktu() (belum di test):

      void tampilInformasiWaktu()
      {
      dmd.selectFont(fontInformasi);

      byte jamBCD = bin2bcd(now.jam % 12);
      byte menitBCD = bin2bcd(now.menit);
      byte detikBCD = bin2bcd(now.detik);

      byte index = 0;
      index = bcdToArray(buffer + index, jamBCD);
      buffer[index++] = ':';
      index += bcdToArray(buffer + index, menitBCD);
      buffer[index++] = ':';
      index += bcdToArray(buffer + index, detikBCD);
      buffer[index++] = ' ';
      if(now.jam / 12)
      {
      buffer[index++] = 'P';
      }
      else
      {
      buffer[index++] = 'A';
      }
      buffer[index++] = 'M';
      buffer[index] = 0;

      uint8_t lebarText = dmd.stringWidth(buffer);
      dmd.drawString((l - lebarText) / 2, infoWaktuTop, buffer);
      }

  4. semua file sudah saya download….dan ketika saya lakukan COMPILING….maka muncul satu persatu file error….mohon saran dan bimbingan serta petunjuknya booozzz…..terimakasih sebelumnya

    1. const uint16_t alamatFont[] = {&SystemFont5x7Ramping, &Arial14, &Arial_Black_16};…….. yang ini menjadi hambatan saat di upload

    2. Sudah di ulang compile dengan sketch dan library yang didownload kembali dari halaman ini. di compile dengan arduino 1.8.10 (dibuat dengan arduino 1.8.9)
      >> proses compile berjalan lancar dan tidak ditemukan adanya kesalahan
      :: coba update arduinonya ke versi yang lebih baru.

    3. SystemFont5x7Ramping….ini dimana lokasinya….sdh saya cari belum ketemu juga yaaaa……dan sebagai informasi sekarang saya sudah pakai ARDUINO 1.8.13

    1. maksudnya ini ya…

      #include <fonts/SystemFont5x7Ramping.h>
      #include <fonts/Arial14.h>
      #include <fonts/Arial_Black_16.h>
      #include <fonts/angka6x13.h>
      #include <fonts/AllahMuhammad.h>
      

      pake library yang ada di halaman ini, karena beberapa penyesuaian

  5. Kang saya mau buatin jadwal sholat buat dimesjid,tapi bisa ga kalau setingnya manual ga pake bluetooth
    tapi pake tombol,makasih kang

    1. jadwal shalat dengan dot matrix/dmd seperti ini agak kompleks, sehingga settingannya juga lebih kompleks
      bisa saja dibuatkan settingan tombol tapi dengan batasan tertentu.

  6. Alahamdulillah…upload sketch berhasil. tapi Nyala nya sampai running text tidak tampil terus. harus di off dulu catu daya nya. di on kan ada lagi sampai running text. Terimakasih sebelumnya…semoga sehat selalu.

  7. Kang Sy dah berhasil buat JWS nya ,kl boleh sy bagi APK nya yang full ,video hasilnya harus sy upload ke mana
    Makasih Kang

    1. JWS di artikel ini di desain untuk 2 dan 3 panel
      jika menginginkan untuk 1 panel mesti di design ulang
      kalo hanya untuk coba-coba ganti bagian ini:

      #define jumlahKolomPanel 2 //panel

      menjadi

      #define jumlahKolomPanel 1 //panel

  8. asslkm..bang izin bertanya …saya rahmat dari Aceh, mohon izin untuk project ini saya pake power supply casan HP 5volt 1 amper , tapi pada saat di cabut powernya ko jam sholat seting lokasinya jadi jakarta lagi ya bang…gak nyimpen ya bang..mohon arahan…terimkasih wssllm

  9. Assalamualaikum bang bagaimana menghubungkan bluetooth krn setiap mau di hubungkan minta sandi apa sandinya bang…….

  10. Kang mau tanya untuk setting jadwal shallat nya lintang dan bujurnya sudah di atur sesuai dengan daerah sini tp kenapa masih ga sesuai yaa utk jadwal shallat nya, saya harus berunjuk kemana kalau seperti ini?

    1. tetap merujuk ke jadwal shalat yang berlaku
      setting saja posisi lintangnya hingga Subuhnya sama, kemudian atur sudut-sudut lainnya (gunakan angka belakang koma untuk pergeseran sedikit)

      perhitungan jadwalnya untuk daerah kota Padang ngga ada masalah
      ngga tau juga dengan daerah lain

  11. Assalamualaikum, kalau DMD dan JWS_semesin.zip filenya ada dimana ya?, lalu untuk seperti definisi.h Fungsi.h konstanta.h dimasukan library pada saat apa ya? Terimakasih

  12. const uint16_t alamatFont[] = {&SystemFont5x7Ramping, &Arial14, &Arial_Black_16}; //

    Saat verify keluar pesan eror seperti itu disebabkan karna apa? Library?

  13. Tampilan bergaris (seperti cetakan printer dot matrix yg putus-putus),trus waktu awal dinyalakan tidak ada tampilan AllahMuhammad, Setelah setting pake HP, hanya sebentar tampilan jam sesuai, trus jam nya kembali berubah menjadi 05 05, detik ga muncul/berkedip.apakah ada script yg kurang atau gimana ya kang? jika berkenan,mohon bimbingannya kang.wassalam

  14. marqueKiri.tinggi = dmd.fontHeader.height;
    ‘class SPIDMD’ has no member named ‘fontHeader’
    klo yang muncul error kya yang diatas gimana penyelesaiannya kang?
    mohon pencerahannya… mksh

  15. Kang … Kok gak bisa setting dari aplikasi bluetooth nya .. tgl dan tahun masih 2018 terus gak berubah?….
    Apakah file sketch nya harus di upload satu2?..yg 8 file

  16. Bang … Makasih sebelum nya… Sya mau tanya ko tulisan alloh sama muhammad nya di tengahnya ada garis besar …. Klo di mode demo bagus gak ada garisnya…

  17. Bang ini ko setelah iqomah blank hitam ga ada respon apa apa
    harus di matikan dulu baru bisa jalan lagi

    sebelmnya terima kasih

    1. dalam mode shalat (setelah iqamah) semua aktifikas tampilan dinonaktifkan (padam), dan akan nyala kembali saat mode shalat selesai
      coba cek setingan lamanya waktu shalat, mungkin terlalu besar menitnya

  18. Bang saya compail kog error
    exit status 1
    font/systemfont5x7Ramping.h; No such file or directory…
    Padahal untuk file font/systemfont5x7Ramping.h Sudah Ada.
    Saya menggunakan Arduino yg versi 1.8.12
    Mohon petunjuknya bang…
    🙏🙏🙏

  19. izin bertanya master maksudnya yg ini gimana ya saya kurang paham karna saya ambil psu nya dari adaptor hp dan langsung masuk power utama arduini bukan dari psu 5volt 5amp..

    “Pastikan daya mencukupi (kalo tidak punya 5V > 5A hubungkan saja GND DMD ke GND Arduino tapi tidak Vcc +5V-nya)”

  20. izin master
    untuk program yang baru pakenya arduino apa ya ? saya upload diarduino nano flash memorynya overload master.
    terima kasih.

  21. Pa izin bertanya, pada rangkaian, ke 7 GND pada panel p10 itu semuanya harus dihubungkan pada hc-05 atau boleh hanya salah satunya saja? saya kurang paham, terima kasih

    1. sketch ini menggunakan acuan sudut2 matahari untuk jadwalnya
      setelah lintang-bujur di atur sesuai lokasi, jika masih kurang sesuai jadwalnya maka pengaturannya di set bagian sudut fajar dst

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.