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

}





 

Wednesday, November 4, 2020

[Arduino] - Jam digital dan running text dengan LED Max7219

 [Arduino] - Jam digital dan running text dengan LED Max7219

 




#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h>                        // DS3231clock
#include "RTClib.h"                      // DS3132 clock

/* JAM MEJA DIGITAL DENGAN RUNNING TEXT TGL
 *  KOMPONEN
 *  - ARDUINO
 *  - RTC DS 3231
 *  MODIFIED : APLIKASI-HEBAT STDUIO
 *  DATE MODIFIED : 4 NOV 2020
 */

//init
RTC_DS3231 rtc3231;

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

// HARDWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// SOFTWARE SPI
//MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

//const uint8_t SPEED_IN = A5;
//const uint8_t DIRECTION_SET = 8;  // change the effect
//const uint8_t INVERT_SET = 9;     // change the invert


//const uint8_t SPEED_DEADBAND = 5;

uint8_t scrollSpeed = 60;    // default frame delay value

textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 20; // keceptan running text in milliseconds

// Global message buffers shared by Serial and Scrolling functions
#define  BUF_SIZE  175
//int pjg=myString.length();
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = { " "};

char c[100];
 
int tahun;
int bulan;
int tgl;
int jam;
int menit;
int detik;
int blink=0;
int blink1=0;
int dayoffweek;
String s;

String Hari[7] = {
  "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"
};

bool newMessageAvailable = true;

void setup()
{

  rtc3231.begin();
  P.begin();
  P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);

  P.setIntensity(0);
  // Clear the display:
  P.displayClear();
  //setting jam pertama kali
  //rtc3231.adjust(DateTime(2020, 11, 2, 5, 36, 0));
 
}

void loop()
{
//P.setTextAlignment(PA_CENTER);
get_time();


//int detik=29;

s=Hari[dayoffweek] + " TGL "+ Konversi(tgl)+"-"+ Konversi(bulan)+ "-"+ Konversi(tahun)+" JAM "+ Konversi(jam)+ ":"+ Konversi(menit)+"          ";
s.toUpperCase();
s.toCharArray(c, s.length()+1);
//P.displayReset();

//readSerial();
if (blink<=1)
{
  if (P.displayAnimate())
  {
    if (newMessageAvailable)
    {
     //strcpy(curMessage, newMessage);
      strcpy(curMessage, c);
      newMessageAvailable = false;
    }else {
      blink++;
      //P.displayClear();
      newMessageAvailable = true;
      P.displayText("welcome", PA_CENTER, scrollSpeed, 1000, PA_OPENING_CURSOR,PA_OPENING_CURSOR);
      P.displayReset();
      
      }

    
    P.displayReset();
  }
 

} else
{
  blink++;
  if (blink1==0)
  {
  P.print(Konversi(jam)+ ":"+ Konversi(menit));
  blink1=1;
  } else
  {
    P.print(Konversi(jam)+ " "+ Konversi(menit));
    blink1=0;
  }
  delay(1000);


 
  if( blink>=30) {
    blink=0;P.displayClear();
    newMessageAvailable = true;
    P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
  }
}


}

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

void get_time()
{
  DateTime now= rtc3231.now();
  //save time to array
  tahun= now.year();
  bulan = now.month();
  tgl = now.day();
  dayoffweek = now.dayOfTheWeek(); //returns 0-6 where 0 = Sunday
  jam = now.hour();
  menit = now.minute();
  detik = now.second();
}

Video demo

Hasil Program Arduino




Saturday, October 31, 2020

[Arduino] Pemograman LED MAX 7219 dengan Arduino Uno

Pemograman LED MAX 7219 dengan Arduino Uno

 Gambar Diagram Koneksi Pin


Program di Arduino:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>


#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

// HARDWARE SPI
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

int i = 0;
textEffect_t texteffect[] =
{
  PA_PRINT,
  PA_SCAN_HORIZ,
  PA_SCROLL_LEFT,
  PA_WIPE,
  PA_SCROLL_UP_LEFT,
  PA_SCROLL_UP,
  PA_OPENING_CURSOR,
  PA_GROW_UP,
  PA_MESH,
  PA_SCROLL_UP_RIGHT,
  PA_BLINDS,
  PA_CLOSING,
  PA_RANDOM,
  PA_GROW_DOWN,
  PA_SCAN_VERT,
  PA_SCROLL_DOWN_LEFT,
  PA_WIPE_CURSOR,
  PA_DISSOLVE,
  PA_OPENING,
  PA_CLOSING_CURSOR,
  PA_SCROLL_DOWN_RIGHT,
  PA_SCROLL_RIGHT,
  PA_SLICE,
  PA_SCROLL_DOWN
};

void setup() {
  myDisplay.begin();
  myDisplay.setIntensity(0);
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.setPause(1000);
  myDisplay.setSpeed(30);
  myDisplay.displayClear();
}


void loop() {
  if (myDisplay.displayAnimate()) {
    if (i < sizeof(texteffect)) {
      i++;
    }
    else {
      i = 0;
    }
    myDisplay.displayText("Hebat", myDisplay.getTextAlignment(), myDisplay.getSpeed(),                       myDisplay.getPause(), texteffect[i], texteffect[i]);
    myDisplay.displayReset();
  }
}

[Arduino] Pemograman RTC DS3231 dengan Arduino Uno

 Pemrograman RTC DS3231 dengan Arduino Uno


 

 

# belajar03-arduino-ds3231.ino

#include <Wire.h>
#include "RTClib.h"

/*
 *  Program RTC DS3231 Dengan ardunio uno
 *  Tgl : 31 oktober 2020
 *  Koneksi Pin RTC3231 ke PIN Arduiono UNO
 *    GND -> GND
 *    VCC -> +5V
 *    SCL -> A5
 *    SCA -> A4
 *  Provide by : aplikasi-hebat Studio
 *  
 */
 
//init rtc3231
RTC_DS3231 rtc;

 //
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
 
void setup () {
  //init serial komunikasi dengan serial komputer utk tampil di serial monitor
  Serial.begin(9600);
  rtc.begin();
  delay(3000); // wait for console opening
  //setting tanggal awal: thn,bulan,tgl,jam,menit,detik
  rtc.adjust(DateTime(2020, 10, 31, 15, 22, 0));
  }

 
void loop () {
    DateTime now = rtc.now();
 
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    Serial.println();
    delay(1000);
}

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