Widget Ads

Arduino

Memprogram Sendiri Lampu Strobo - Bagian 2


Kabar baik bagi anda yang sudah lama menunggu artikel ini terbit. Ya, benar sekali, kali ini kita akan membahas pemrograman strobo yang sangat mudah menggunakan library Joatsy Strobo v1.6. Dapat didownload di : sini. Setelah itu silahkan instal library beserta board (jika menggunakan modul joatsy). Jika belum paham cara instalasi library secara manual, kami akan memberikan sedikit cara sederhana, yaitu dengan cara :
- Extract zip joatsy strobo v1.6 (library) kedalam folder C:\Users\NAMA_USER\Documents\Arduino\libraries
- Extract zip joatsy board strobo (board) kedalam folder C:\Users\NAMA_USER\Documents\Arduino\hardware
- Silahkan restart aplikasi Arduino IDE (disarankan menggunakan versi terbaru)
Untuk menggunakan library ini disarankan melalui board khusus yang sudah kami buat yaitu Joatsy Strobo Reprogrammable (artikel terkait dapat dibuka di https://blog.joatsy.com/artikel-modul-strobo-repogrammable-44-link.html). Namun sebenarnya bisa juga dicoba melalui board arduino biasa dengan beberapa tambahan rangkaian. Intinya library ini akan mengendalikan port output arduino yang sudah diatur tipe common nya. Sehingga jika ingin buat sendiri misalnya dengan transistor ataupun tanpa transistor silahkan disesuaikan sendiri. Contoh rangkaian menggunakan transistor dapat dilihat di https://blog.joatsy.com/artikel-membuat-sendiri-lampu-strobo-23-link.html.
Library ini merupakan hasil update dari library versi 1.0 yang telah dijelaskan pada artikel . Perbedaannya terdapat di penyempurnaan fungsi yang lama, penambahan fungsi pembacaan push button, fungsi simpan mode di memori, fungsi baca mode dari memori, autorun, pin yang sudah ditentukan untuk board joatsy strobo (PIN_1 s/d PIN_7) juga pin tombol (BUTTON_MODE). Langsung saja kita mulai dari contoh pemrogramannya :

 

#include ‹JoatsyStrobo.h›

int mode=1;
JoatsyStrobo strobo(LED_1, LED_2, LED_3, LED_4, LED_5, LED_6);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600);
  Serial.println("Strobo Test");
  strobo.setdelay(50);
  strobo.setcommon(LOW);
  strobo.setbutton(BUTTON_MODE);
  mode = strobo.readmode();
  Serial.println("mode : " + String(mode));
}

void loop() {
  read_button();
  if (mode==1)
  {
    mode_1();
  }
  else if (mode==2)
  {
    mode_2();
  }
}

void read_button()
{
  if (strobo.readbutton()==1)
  {
    Serial.println("Tombol ditekan!");
    digitalWrite(LED_BUILTIN, LOW);
    delay(100);
    digitalWrite(LED_BUILTIN, HIGH);
    mode++;
    if (mode>2)
      mode=1;
    strobo.savemode(mode);
  }
}

void mode_1()
{
  Serial.println("mode : 1");
  for (byte b=1;b<=10;b++)
  {
    int delay_value=b*10;
    for (byte a=1;a<=6;a++)
    {
      strobo.on(a,delay_value);
    }
    strobo.off(0,0);
  }
  for (byte b=10;b>=1;b--)
  {
    int delay_value=b*10;
    for (byte a=1;a<=6;a++)
    {
      strobo.on(a,delay_value);
    }
    strobo.off(0,0);
  }
}
void mode_2()
{
  Serial.println("mode : 2");
  strobo.off(0,0);
  for (byte a=1;a<=6;a++)
  {
    strobo.on(a,100);
  }
  for (byte a=6;a>=1;a--)
  {
    strobo.off(a,100);
  }
}

Penjelasannya :

#include ‹JoatsyStrobo.h›

Baris diatas menjelaskan penggunaan library strobo (import library)

int mode=1;

Membuat variable untuk menyimpan nilai mode secara dinamis (RAM).

JoatsyStrobo strobo(LED_1, LED_2, LED_3, LED_4, LED_5, LED_6);

Penggunaan library JoatsyStrobo dengan nama variable strobo. Diikuti dalam kurung nomor led 1 sampai 10 (maksimal). Jika dalam kode diatas hanya sampai 6 berarti nilai 7 sampai 10 tidak kita gunakan. Dalam baris tersebut dituliskan LED_1 dan seterusnya (pin statis menurut board joatsy strobo), atau dapat juga langsung dituliskan nama pin arduino misalnya D2, D3, D4 dan D5 sesuai rangkaian led anda..

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);

Penggunaan indikator pada board joatsy strobo (untuk membantu pemrograman/testing) dalam kode program tersebut menggunakan pin statis (LED_BUILTIN) atau jika menggunakan arduino uno adalah pin D13.

Serial.begin(9600);
Serial.println("Strobo Test");

Penggunaan fasilitas serial (yang dimonitor dari aplikasi arduino) untuk memudahkan proses debug atau saat ujicoba per baris kode..

strobo.setdelay(50);
strobo.setcommon(LOW);
strobo.setbutton(BUTTON_MODE);

Baris pertama mengatur delay umum (berguna saat kita menggunakan delay yang sama dalam kebanyakan baris kode). Lalu setcommon berguna untuk mengatur polaritas led yang langsung menuju ke sumber tegangan, sedangkan nilai data kita adalah kebalikan dari nilai common tersebut. Sedangkan setbutton merupakan fungsi penggunaan tombol dengan pin statis, jika menggunakan arduino biasa tentukan nomor port nya..

mode = strobo.readmode();
Serial.println("mode : " + String(mode));

Membaca nilai memori dari chip kontrol. Kemudian nilainya dimasukan dalam variabel dengan nama mode. Lalu dicetak di layar monitor (serial monitor) agar kita tau nilai modenya..

read_button();

Fungsi/sub program untuk membaca nilai tombol, tombol disarankan aktif jika menyambung ke ground..

if (mode==1)
{
mode_1();
}
else if (mode==2)
{
mode_2();
}

Prasyarat pengerjaan program berdasar nilai variabel mode. Jika mode bernilai 1 maka jalankan sub program mode_1 sedangkan jika nilai mode adalah 2 maka jalankan sub program mode_2. Jika menginginkan jumlah mode banyak, perbanyak prasyarat ini dan jangan lupa buat sub program untuk masing-masing syarat misal mode_3 dan seterusnya. Jangan lupa jika memanggil nama sub program harus sama penulisannya dengan nama sub program tersebut (besar kecil huruf pengaruh). Dan saat memanggil jangan sampai lupa tanda (); misalnya mode_3();.

void read_button()
{
if (strobo.readbutton()==1)
{
Serial.println("Tombol ditekan!");
digitalWrite(LED_BUILTIN, LOW);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
mode++;
if (mode>2)
mode=1;
strobo.savemode(mode);
}
}

Sub program untuk baca tombol. Tunjukan ke serial monitor jika tombol ditekan, kemudian kedipkan led indikator (led builtin). Lalu tambah nilai mode dengan nilai 1 (mode++), misalnya nilai mode awalnya adalah 1 maka dengan proses ini mode akan menjadi 2 karena 1+1. Begitu juga dengan jika mode sebelumnya bernilai 2 maka akan menjadi 3, dan seterusnya. Namun ada aturan, jika mode lebih dari 2 maka kembalikan ke 1, ini berlaku untuk menentukan jumlah maksimal mode yang kita buat. Jangan sampai kita hanya menyiapkan jumlah sub program untuk mode cuma 2 tapi nilai mode nya lebih dari 2. Hal tersebut membuat program akan hang (atau tidak tampil apa apa). Kemudian yang tidak kalah penting adalah fungsi savemode, ini akan menyimpan nilai mode kedalam memori. Dalam kode tersebut, menggunakan alamat memori default yaitu alamat ke-0, kita dapat mengubahnya jika menginginkan alamat lainnya dengan cara strobo.savemode(nilai_mode, alamat_memori). Namun dengan mengubah alamat memori, tentu saat kita membaca memori perlu mengubah alamatnya juga agar sama. Dari fungsi diatas pembacaan memori adalah strobo.readmode(alamat_memori)..

void mode_1()
{
Serial.println("mode : 1");
for (byte b=1;b<=10;b++)
{
int delay_value=b*10;
for (byte a=1;a<=6;a++)
{
strobo.on(a,delay_value);
}
strobo.off(0,0);
}
for (byte b=10;b>=1;b--)
{
int delay_value=b*10;
for (byte a=1;a<=6;a++)
{
strobo.on(a,delay_value);
}
strobo.off(0,0);
}
}

Fungsi/sub program untuk mode 1. Pada mode ini, akan masuk perulangan (for) dari 1 sampai 10, kemudian menentukan nilai delay dinamis sesuai nilai perulangan tersebut. Karena nilai delay = nilai perulangan dikali 10. Sehingga pada hasilnya nilai penundaan akan terlihat semakin lama. Lalu dalam perulangan penentuan delay tersebut diselipkan perulangan lainnya, untuk menyalakan led satu persatu dari 1 sampai 6. Mulai dari 1 sampai ke 6 dengan delay yang dibuat statis. Lalu proses lainnya adalah perulangan ganda kembali namun dibalik yaitu dari 10 ke 1 sehingga delay akan semakin cepat, walau perulangan nyala led tetap dari 1 ke 6. Diakhir kode muncul strobo.off(0,0) untuk mematikan semua led..

void mode_2()
{
Serial.println("mode : 2");
strobo.off(0,0);
for (byte a=1;a<=6;a++)
{
strobo.on(a,100);
}
for (byte a=6;a>=1;a--)
{
strobo.off(a,100);
}
}

Fungsi/sub program untuk mode 2. Lebih simple, yaitu menyalakan led 1 ke 6 menggunakan perulangan dengan delay statis (100ms). Lalu dimatikan secara terbalik, menggunakan perulangan dari 6 ke 1 dengan nilai delay yang sama..

Untuk lebih jelasnya dapat dilihat pada video dibawah ini.

 

 

Silahkan dicoba terlebih dahulu, silahkan share pengalaman uji cobamu dengan cara berkomentar dibawah ini. Atau bisa juga via whatsapp 0895-0585-0594.
Terimakasih, semoga dapat menambah ilmu dan berguna bagi sesama.
 

 

 

Tags

Baca Juga

2 komentar

  1. Fahril rendra pratama

    cara buat program arduino pro mini atmega 328 16 mhz agar menjadi strobo dengan menggunakan led ws ??
  2. Antok.antong

    Boleh mintak data buat strobo led ws2811 gan

TULISKAN KOMENTAR KAMU

Wajib diisi (No.hp akan kami rahasiakan)*

Nama *

Alamat *

No.hp *