Arduino LED Bitwise Operation Tutorial dan Penjelasan


Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan LED sebagai indikator output. Tutorial akan disusun secara bertahap mulai dari dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Delapan buah LED tersebut dirangkai secara common cathode, dimana cathode dari setiap LED disambungkan ke ground Arduino Uno. Sedangkan anode dari 8 buah LED memperoleh arus dari pin 0 hingga 7 Arduino Uno, yang terlebih dahulu melalui resistor sebagai pembatas arus. Resistor pembatas arus tersebut bisa bernilai 330 ohm atau 470 ohm, semakin besar nilai hambatan resistor maka semakin redup nyala dari LED tersebut. Rangkaian LED secara common cathode ini dimaksudkan karena untuk program yang akan dibuat menggunakan prinsip active high, dimana bila diberikan logika high 1, LED akan menyala. Demikian sebaliknya, nyala LED akan padam bila diberikan logika low 0.
Langkah kerja untuk project Arduino sederhana ini ialah sebagai berikut ini.
  • Rangkai komponen yang dibutuhkan seperti pada gambar wiring diagram dengan board Arduino
  • Sambungkan board Arduino dengan connector USB ke komputer
  • Buka Arduino IDE, dan tulis source code (sketch) program
  • Lakukan Verify untuk memastikan program telah ditulis dengan benar
  • Selanjutnya Upload program tersebut ke board Arduino
  • Lakukan percobaan dan amati hasilnya

Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

<img src="common_cathode.png" alt="common_cathode">


Berikut ini adalah source code (sketch) untuk belajar operasi bitwise AND dengan indikator LED animation.

/*
Program LED bitwise operation
AND

Loki Lang
*/

void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed1 = B00001111;
  PORTD = dataLed1;
  delay(1000);
  byte dataLed2 = B01010101;
  PORTD = dataLed2;
  delay(1000);
  byte dataLed3 = dataLed1 & dataLed2;
  PORTD = dataLed3;
  delay(1000);
}

Penjelasan program sebagai berikut.
  • DDRD (Data Direction Register D) digunakan untuk mendefinisikan PORTD apakah sebagai input atau output. Disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu jika diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable dataLed1 dalam byte (8 bit), dengan nilai awal adalah B00001111, atau 15
  • Untuk variable dataLed2 dalam byte (8 bit), dengan nilai awal adalah B01010101, atau 85
  • Untuk variable dataLed3 dalam byte (8 bit), dengan nilai hasil operasi logika AND antara datal=Led1 dengan dataLed2, adalah B00000101, atau 5
  • Masing-masing nilai variable tersebut akan ditampilkan dalam tampilan LED indikator
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delay(), semakin besar nilai yang diberikan maka akan semakin lama durasinya. Adapun source code (sketch) cara lain dengan hasil nyala LED animation bergerak dari MSB (Most Significant Bit) ke LSB (Least Significant Bit) dan satu lagi LED animation bergerak dari LSB ke MSB.

/*
Program LED bitwise operation
OR
Loki Lang
*/


void setup()
{
  DDRD = 255;
}

void loop()
{
  byte operand1 = B01010101;
  byte operand2 = B10101010;
  byte result = operand1 | operand2;
  PORTD = operand1;
  delay(1000);
  PORTD = operand2;
  delay(1000);
  PORTD = result;
  delay(1000);
}

Penjelasan program ialah sebagai berikut.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output. Disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable operand1 dalam byte (8 bit), dengan nilai awal adalah 1, atau B00000001, yang nilai bit akan digeser ke kiri sebanyak nilai variable lang
  • Untuk variable operand2 dalam byte (8 bit), dengan nilai awal adalah 128, atau B10000000, yang nilai bit akan digeser ke kanan sebanyak nilai variable lang
  • Untuk variable result dalam byte (8 bit), dengan merupakan hasil operasi logika OR antara operand1 dengan operand2
  • Fungsi variable result ini ialah menampung operasi OR, yang akan ditampilkan ke tampilan LED indikator
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking dan Arduino Uno LED animation.

Bila ada sesuatu yang belum jelas dan ingin tahu lebih dalam seputar project Arduino, pemrograman, dan elektronika, bisa bertanya pada bagian comment atau melalui page Facebook berikut.