Sunday, February 13, 2022

PEMBUATAN JAM DIGITAL P10 MENGGUNAKAN Arduino nano & RTC 3231







ARDUINO PROGRAM


 /* JUDUL : PROGRAM JAM DIGITAL P10 1 PANEL DENGAN NANO & RTC 3231

 * COPY RIGHT : BELAJAR TEHNOLOGI JAMAN NOW

 * PUBLISH : 13 FEB 2022

 * EMAIL   : aplikasihebatstudio@gmail.com

 * 

 * NANO - P10

 * ----------

 * PIN YANG DISAMBUNG

 * Arduino              P-10

 * D6          ->      A

 * D7          ->      B

 * D8          ->      SCLK

 * D9          ->      OE (ENABLE)

 * D11         ->      DATA

 * D13         ->      CLK

 * GND         ->      GND


RTC 3231

--------

 * GND        >>      Pin GND

 * VCC        >>      Pin 5V

 * SDA        >>      Pin SDA  (A4)

 * SCL        >>      Pin SCL (A5)

 * SQW        >>      tidak dihubungkan

 * 32K        >>      tidak dihubungkan


*/



#include <Wire.h> 

#include "RTClib.h" 

#include "DMD.h"        

#include "TimerOne.h"

#include "SystemFont5x7.h"


#define DISPLAYS_ACROSS 1

#define DISPLAYS_DOWN 1


/***** P10 DISPLAY SETTING ***********************************/

DMD dmd( DISPLAYS_ACROSS , DISPLAYS_DOWN);


RTC_DS3231 rtc;



 // int tahun;                                                                              

  byte jam;

  byte menit;                                                                                                                                                                    //| 

  byte detik;

  byte bulan; 

  byte tahun;

  byte hari;

  byte tgl;

  int k; int j;


 

 void drawText(int kolom,int baris,String text);

 char weekDay[][7] = {"Mingg" ,"Senin","Slasa","Rabu", "Kamis", "jumat", "Sabtu"}; // array hari, dihitung mulai dari senin, hari senin angka nya =0,


  

//byte detik1=0;

void ScanDMD()

{

  dmd.scanDisplayBySPI();

}




void setup()

{  

  Timer1.initialize( 4000 );   // I find the default 5000 gives a visible flicker    

  Timer1.attachInterrupt( ScanDMD );  

  dmd.selectFont(SystemFont5x7);

  dmd.clearScreen( true );

   Wire.begin();

   rtc.begin();

 // just datatime  

 //  rtc.adjust(DateTime(2022, 02, 13, 14, 50, 0));

 k=0;

 j=0;

}



void loop()

{

  tampil_jam_kecil_tgl(30);

}





void drawText(int kolom,int baris,String text)

{

int pj_text=text.length()+1;

char text_char[pj_text];

text.toCharArray(text_char,pj_text);

dmd.drawString(kolom,baris,text_char,pj_text,GRAPHICS_NORMAL);

} 



void tampil_jam_kecil_tgl(int lama)

{

 // dmd.clearScreen(true);

//lama=60;


String hh,mm,ss;

for(int i=0;i<lama;i++)

{   

   DateTime now = rtc.now();

   jam= now.hour();

   menit=now.minute();

   detik=now.second();   

   tahun  =  now.year();

   bulan = now.month();

   tgl  =  now.day();

                                                                                

   hh=Konversi(jam);

   mm=Konversi(menit);

   ss=Konversi(detik);


dmd.selectFont(SystemFont5x7);


if(k%2==0)

{

drawText(1,0,hh+":"+mm);

//drawText(1,9,Konversi(tgl)+"/"+Konversi(bulan));

k++;

} 

else {

drawText(1,0,hh+" "+mm);

k=0;

}


j++;

if(j==1)

{

drawText(1,9,Konversi(tgl)+"/"+Konversi(bulan));

} 


if(j==10)

{

drawText(1,9,String(weekDay[hari]));


}


if (j>=20) j=0;

delay(1000);



}


}



///Konversi angka agar ada nol didepannya jika diawah 10

String Konversi(int sInput) {

  if (sInput < 10)

  {

    return"0" + String(sInput);

  }

  else

  {

    return String(sInput);

  }

}



Sunday, February 7, 2021

Membuat running text 1 dan 2 baris dengan led P10 menggunakan Arduino Wemos d1 mini

 Membuat running text 1 dan 2 baris denga led P10 menggunakan Arduino Wemos d1 mini

 Untuk membuat membuat running text dengan LED menggunakan arduino wemows d1 diperlukan bahan sebagai berikut:

    1. Arduino Wemos d1 mini

    2. Led P10 + kabel konektor p10

    3. Kabel usb micro

    4. Arduino IDE Editor

 Rangkaian Lengkap

 

Pin di P10

 

 

 

Hasil gambar untuk port pin p10

 

 

 

 

Skema Rangkaian

Pin P10 ke Arduino Wemos

Pin 1(Enable)      ----> D4

Pin 2 (A)             ----> D0

Pin 4 (B)             ----> D6

Pin8 ( CLK)        ----> D5

Pin 10 (SCLK)    ----> D3

Pin 12 (DATA)    ----> D7

 

 Program Arduino

 _20210207-running_text_2baris_and_running_besar_wemosp10.ino

#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include <DMD2.h>
#include <fonts/SystemFont5x7.h>
#include <fonts/Arial_Black_16.h>
#include <fonts/Droid_Sans_12.h>
#include <fonts/Droid_Sans_16.h>


void Running(String s);
String Konversi(int sInput);
void jam_besar(int lama);

// Set Width to the number of displays wide you have
const int WIDTH = 2;

// You can change to a smaller font (two lines) by commenting this line,
// and uncommenting the line after it:
const uint8_t *FONT = Arial_Black_16;
const uint8_t *FONT2 = Droid_Sans_12;
const uint8_t *FONT3 =Droid_Sans_16;
const uint8_t *FONT4 = SystemFont5x7;

SPIDMD dmd(2, 1, D4,D0,D6,D3);
//// marquee values
int marX = 1;   // awal kotak running text minimal diawali 1.
int marY = 1;
int marWidth = 63;  // dimensi running text  32 dikurangi marX.
int marHeight = 16;
int marCur = marX + marWidth;  // kursor
//marCur = marX + marWidth;
int messageCount;  // karakter yang aktif
//int widthCount;    // sisa lebar satu huruf terakhir
int messageLength;  // jumlah karakter pada pesan
boolean blinking=true;
int i=0;
boolean jalan=true;

 int hours, minutes;     //jam sholat dan  menit sholat
 


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


void Running_besar(String s);
int tulisan_menuju_azan(int jam,int menit,String* waktu_sholat);




// the setup routine runs once when you press reset:
void setup() {
 pinMode(D4,OUTPUT);
 digitalWrite(D4,LOW);
 
 dmd.setBrightness(250);
 dmd.begin();
 dmd.selectFont(SystemFont5x7);
 dmd.clearScreen();  
 
}


void loop()
{
   dmd.clearScreen();
   int lama=1;  //3 menit
   for(i=0;i<2*lama;i++)
    {
   Running("SELAMAT DATANG DI WORKSHOP KAMI");
    }

   dmd.clearScreen();
   lama=1;  //3 menit
   for(i=0;i<2*lama;i++)
    {
   Running_besar("SELAMAT DATANG DI WORKSHOP KAMI");
    }
    jam_besar(30);
}


void Running(String s)
{
  int jam= 10;
  int menit=10;
  int detik=10;
  String waktu1=Konversi(jam)+":"+Konversi(menit)+"  ";
  dmd.selectFont(SystemFont5x7);
  dmd.drawString(33,0,waktu1);

 
  marX=1;
  marY=9;
  jalan=true;
  while(jalan)
  {
  messageLength = s.length()+65;
  //Geser 1 pixel dulu.
  dmd.movePixels(marX, marY, marX-1, marY, marWidth, marHeight);
  marCur = marCur-1;
  if (marCur == marX + marWidth - dmd.charWidth(s[messageCount],FONT)-1) {
    marCur = marX + marWidth;
    messageCount = messageCount+1;
    if (messageCount == messageLength){
      messageCount = 0;
      jalan=false;
    }
  }

  dmd.selectFont(SystemFont5x7);
  dmd.drawChar(marCur, marY , s[messageCount]);  // tulis karakter baru setelah digeser
  delay(50);
  i++;

if(i*50 >600)
{
 // DateTime now = rtc.now();
  int jam= 10;
  int menit=10;
  int detik=10;
  String waktu1=Konversi(jam)+":"+Konversi(menit)+"  ";
  String waktu2=Konversi(jam)+" "+Konversi(menit)+"  ";

   
  if (blinking)
  {
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(33,0,waktu1);
    blinking=false;
  }
  else
  {
    dmd.selectFont(SystemFont5x7);
    dmd.drawString(33,0,waktu2);
    blinking=true;
 }

  i=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);
  }
}



void jam_besar(int lama)
{
 dmd.clearScreen();
 for (int i=0;i<=lama;i++)
  {
  int jam= 22;//now.hour();
  int menit=10;//now.minute();
  int detik=0;//now.second();
  String waktu1=Konversi(jam)+":"+Konversi(menit)+"  ";
  String waktu2=Konversi(jam)+" "+Konversi(menit)+"  ";

  dmd.selectFont(Droid_Sans_12);
  dmd.drawString(34, 3, Konversi(jam)); //koordinat tampilan
  dmd.drawString(46, 2, "::"); //koordinat tampilan
  dmd.drawString(51, 3, Konversi(menit)+"   ");
  delay(500);

  dmd.drawString(34, 3, Konversi(jam)); //koordinat tampilan
  dmd.drawString(46, 2, " "); //koordinat tampilan
  dmd.drawString(51, 3, Konversi(menit)+"   ");
  delay(500);
 }

 dmd.clearScreen();
}






void Running_besar(String s)
{

dmd.selectFont(Droid_Sans_12);
 
marX=1;
marY=4;
//DMDFrame subFrame(35, 1, 60, 14);
jalan=true;
while(jalan)
{
messageLength = s.length()+65;
//Geser 1 pixel dulu.
dmd.movePixels(marX, marY, marX-1, marY, marWidth, marHeight);
marCur = marCur-1;
if (marCur == marX + marWidth - dmd.charWidth(s[messageCount],FONT)-1) {
  marCur = marX + marWidth;
  messageCount = messageCount+1;
  if (messageCount == messageLength){
    messageCount = 0;
    jalan=false;
  }
}

dmd.drawChar(marCur, marY , s[messageCount]);  // tulis karakter baru setelah digeser
delay(40);
}

}





 

Pemrograman Running text P10 RGB dengan Arduino Nano

Pemrograman Running text P10 RGB dengan Arduino Nano PIN CONNECTION P10 RGB DENGAN ARDUINO NANO/UNO Source code arduino p10 RGB  #include ...