Media Informasi Kegiatan Guru

Motivasi Menulis

Jumat, 04 Oktober 2024

Membuat running text dengan arduino (materi produk kreatif dan kewirausahaan TJKT)

 
Kali ini saya mencoba untuk berbagi pengalaman dalam praktik membuat running text P10 menggunakan arduino uno sebagai kontrolernya. Pada kesempatan kali ini, alat yang digunakan LED P10, sedangkan untuk powernya 5v dan 3a, apabila powernya kurang maka led tidak sempurna menyala, baiknya power terpisah dengan arduino agar power yang dihasilkan sempurna.
Saya mengambil produk Running Text dengan LED P10 karena instalasi yang relatif mudah, serta dalam dunia bisnis running text ini masih banyak peminat khususnya untuk di depan toko,kantor dan sekolah. Harapan saya, peserta didik mampu mengaplikasikannya minimal pengetahuan pribadi dan pemakaian sendiri. Tanpa menunggu lama - lama, berikut program dan skemanya.
Yang diperlukan

a. Arduino Uno


b. LED P10

 


c. Kabel Jumper 
male to male
male to female








d. skema




Program Arduino Teks Berjalan


#include <SPI.h>       
#include <DMD.h>       
#include <TimerOne.h>  
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//Isi dengan jumlah panel DMD yang di susun dalam kolom dan baris
#define DISPLAY_COLUMN_COUNT  2
#define DISPLAY_ROW_COUNT     1

#define PIXELS_PER_COLUMN    32
#define PIXELS_PER_ROW        16


DMD dmd(DISPLAY_COLUMN_COUNT, DISPLAY_ROW_COUNT);
char Text[] = "Selamat Datang di DigiWare Unlimited Innovations";
/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}

void setup(void)
{
   //inisialisasi Timer1 untuk menginterupsi pengeksekusian prosedur pindai DMD secara periodik
   Timer1.initialize( 1000 );           //perioda eksekusi pindai DMD selama 1 ms. Nilai yang lebih besar dapat menimbulkan efek flicker.
   Timer1.attachInterrupt( ScanDMD );   //terapkan prosedur interupsi pindai DMD
   dmd.clearScreen( true );   //normalnya true (semua piksel dalam keadaan mati), false (semua piksel dalam keadaan hidup)
}

void loop(void)
{  
   dmd.clearScreen( true );
   dmd.selectFont(Arial_Black_16);
  
   dmd.drawMarquee(Text,strlen(Text),
          (PIXELS_PER_COLUMN*DISPLAY_COLUMN_COUNT)-1,0);
   long start=millis();
   long timer=start;
   boolean ret=false;
   while(!ret){
     if ((timer+30) < millis()) {
       ret=dmd.stepMarquee(-1,0); // Geser 1 karakter ke kiri
       timer=millis();
     }
   }     
}


Program Arduino Moving Sign / Stikman

#include <SPI.h>       
#include <DMD.h>       
#include <TimerOne.h> 

//Isi dengan jumlah panel DMD yang di susun dalam kolom dan baris
#define DISPLAY_COLUMN_COUNT  2
#define DISPLAY_ROW_COUNT     1

#define PIXELS_PER_COLUMN  32
#define PIXELS_PER_ROW    16


DMD dmd(DISPLAY_COLUMN_COUNT, DISPLAY_ROW_COUNT);

// Running stick figure pictures are loosely based on those from this tutorial:
// http://www.fluidanims.com/FAelite/phpBB3/viewtopic.php?f=10&t=102

byte const run1[] PROGMEM = {
    16, 16,
    B00000000, B00001100,
    B00000000, B00011110,
    B00000111, B11111110,
    B00001111, B11111110,
    B00011100, B11111100,
    B00000001, B11111100,
    B00000001, B11110000,
    B00000011, B11111000,
    B00000111, B00011000,
    B00001110, B01110000,
    B00011100, B01100000,
    B00111000, B00000000,
    B01110000, B00000000,
    B01100000, B00000000,
    B01000000, B00000000,
    B00000000, B00000000
};

byte const run2[] PROGMEM = {
    18, 16,
    B00000000, B01110011, B10000000,
    B00000000, B11111111, B10000000,
    B00000000, B00011111, B10000000,
    B00000000, B00111111, B11000000,
    B00000000, B01111011, B11000000,
    B00000000, B11110011, B10000000,
    B00000001, B11100000, B00000000,
    B00000011, B11100000, B00000000,
    B00000111, B01110000, B00000000,
    B01111110, B00111000, B00000000,
    B11111100, B00011100, B00000000,
    B00000000, B00001110, B00000000,
    B00000000, B00000111, B00000000,
    B00000000, B00000011, B10000000,
    B00000000, B00000001, B00000000,
    B00000000, B00000000, B00000000
};

byte const run3[] PROGMEM = {
    18, 16,
    B00000000, B00110000, B00000000,
    B00000000, B01111000, B00000000,
    B00000000, B00011111, B00000000,
    B00000000, B00011111, B00000000,
    B00000000, B00111111, B10000000,
    B00000000, B01111111, B11000000,
    B00000000, B11100011, B10000000,
    B00000001, B11000000, B00000000,
    B00000011, B11100000, B00000000,
    B11111111, B01110000, B00000000,
    B11111110, B00111000, B00000000,
    B00000000, B00011000, B00000000,
    B00000000, B00011100, B00000000,
    B00000000, B00001110, B00000000,
    B00000000, B00000100, B00000000,
    B00000000, B00000000, B00000000
};

byte const run4[] PROGMEM = {
    16, 16,
    B00000001, B11100000,
    B00000011, B11111100,
    B00000000, B00111110,
    B00000000, B01111110,
    B00000000, B11111100,
    B00000001, B10011111,
    B00000011, B00001110,
    B00000011, B00000000,
    B00000011, B10000000,
    B11111111, B10000000,
    B11111000, B11000000,
    B00000001, B11000000,
    B00000011, B10000000,
    B00000111, B00000000,
    B00000110, B00000000,
    B00000100, B00000000
};

byte const run5[] PROGMEM = {
    13, 16,
    B00000000, B00000000,
    B00000000, B00110000,
    B00000111, B11111000,
    B00000111, B11111000,
    B00000111, B11110000,
    B00001111, B11100000,
    B00000111, B00000000,
    B00001111, B00000000,
    B00001111, B00000000,
    B00001111, B10000000,
    B00011100, B00000000,
    B00111000, B00000000,
    B01110000, B00000000,
    B11100000, B00000000,
    B11000000, B00000000,
    B10000000, B00000000
};

byte const run6[] PROGMEM = {
    16, 16,
    B00000000, B00000000,
    B00000000, B00011100,
    B00000000, B00111110,
    B00000001, B11111110,
    B00000000, B11100000,
    B00000001, B11100000,
    B00000001, B11111000,
    B00000011, B00011100,
    B00000110, B00111000,
    B00000110, B01110000,
    B00001100, B00100000,
    B00111000, B00000000,
    B01100000, B00000000,
    B11000000, B00000000,
    B10000000, B00000000,
    B10000000, B00000000
};

byte const run7[] PROGMEM = {
    18, 16,
    B00000000, B00000011, B10000000,
    B00000000, B01111011, B10000000,
    B00000000, B01111111, B10000000,
    B00000000, B00001111, B00100000,
    B00000000, B00011001, B11000000,
    B00000000, B00110000, B11000000,
    B00000000, B01110000, B00000000,
    B00000001, B11110000, B00000000,
    B11111111, B10111000, B00000000,
    B11111111, B00011100, B00000000,
    B00000000, B00001110, B00000000,
    B00000000, B00000111, B00000000,
    B00000000, B00000011, B10000000,
    B00000000, B00000001, B11000000,
    B00000000, B00000000, B01000000,
    B00000000, B00000000, B00000000
};

byte const run8[] PROGMEM = {
    18, 16,
    B00000000, B00000110, B00000000,
    B00000001, B11101111, B00000000,
    B00000001, B11111111, B00000000,
    B00000000, B00111110, B00000000,
    B00000000, B01111111, B11000000,
    B00000000, B11100011, B10000000,
    B00000001, B11000000, B00000000,
    B00000011, B11100000, B00000000,
    B11111111, B01110000, B00000000,
    B11111110, B00111000, B00000000,
    B00000000, B00011100, B00000000,
    B00000000, B00000110, B00000000,
    B00000000, B00000110, B00000000,
    B00000000, B00000111, B00000000,
    B00000000, B00000011, B00000000,
    B00000000, B00000001, B00000000
};

byte const run9[] PROGMEM = {
    16, 16,
    B00000000, B00000000,
    B00000000, B01001110,
    B00000001, B11101110,
    B00000011, B11111110,
    B00000011, B11111110,
    B00000001, B10111100,
    B00000011, B00000000,
    B00000111, B00000000,
    B11111111, B10000000,
    B11111100, B11000000,
    B00000000, B11000000,
    B00000000, B11000000,
    B00000000, B11000000,
    B00000000, B11000000,
    B00000000, B11000000,
    B00000000, B11000000
};

byte const run10[] PROGMEM = {
    13, 16,
    B00000000, B00000000,
    B00000000, B00110000,
    B00000000, B01111000,
    B00000111, B11111000,
    B00001111, B11111000,
    B00000111, B11000000,
    B00001110, B00000000,
    B00001100, B00000000,
    B00001100, B00000000,
    B01111100, B00000000,
    B11111100, B00000000,
    B00011000, B00000000,
    B00110000, B00000000,
    B01110000, B00000000,
    B01100000, B00000000,
    B01000000, B00000000
};

PGM_VOID_P frames[] = {
    run1,
    run2,
    run3,
    run4,
    run5,
    run6,
    run7,
    run8,
    run9,
    run10
};
#define NUM_FRAMES  (sizeof(frames) / sizeof(frames[0]))
unsigned int frame = 0;

#define ADVANCE_MS  (1000 / NUM_FRAMES)
unsigned long lastFrame;
int runStep, runStepMax;

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

void setup() {
    //inisialisasi Timer1 untuk menginterupsi pengeksekusian prosedur pindai DMD secara periodik
   Timer1.initialize( 2000 );           //perioda eksekusi pindai DMD selama 2 ms. Nilai yang lebih besar dari 5ms (5000) dapat menimbulkan efek flicker.
   Timer1.attachInterrupt( ScanDMD );   //terapkan prosedur interupsi pindai DMD
   dmd.clearScreen( true );   //normalnya true (semua piksel dalam keadaan mati), false (semua piksel dalam keadaan hidup)
   lastFrame = millis() - ADVANCE_MS;
   runStepMax = PIXELS_PER_COLUMN * 5;
   runStep = -13;
}

void loop() {
    if ((millis() - lastFrame) >= ADVANCE_MS) {
        dmd.clearScreen( true );
        int x = (runStep - pgm_read_byte(frames[frame])) / 2;
        runStep+=4;
        if (runStep > runStepMax)
          runStep = -PIXELS_PER_COLUMN; 
        dmd.drawBitmap(x, 0, frames[frame],1);
        lastFrame += ADVANCE_MS;
        frame = (frame + 1) % NUM_FRAMES;
    }
}
Share:

0 komentar:

Posting Komentar

Membuat Running text P10 RGB Hub75 dengan Arduino

 Membuat Running text P10 RGB Hub75 dengan Arduino  Membuat running text P10 dengan model hub75 sebetulnya sama modelnya secara fisik sama d...

Iklan
Diberdayakan oleh Blogger.

Cari Blog Ini

Pages - Menu

Pages - Menu

Recent Posts

Blog Romeltea

Romeltea Media

Komunikasi Praktis

BolaGP Sport

Blogger templates