Rabu, 05 Agustus 2015

Arduino Aplikasi Pencacah Sederhana

Arduino Aplikasi Pencacah Sederhana
Aplikasi pencacah (counter) biasa digunakan untuk mencacah suatu entitas yang ingin diketahui jumlahnya dalam suatu sistem. Untuk dapat mencacah jumlah entitas, maka diperlukan suatu sensor yang dapat mendeteksi keberadaan dari entitas tersebut. Salah satu project sederhana Arduino untuk aplikasi pencacah ialah dengan menggunakan limit switch, push button.

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


Penggunaan push button sebagai sebuah sensor, Arduino akan menerima data berapa kali push button tersebut ditekan. Berdasarkan gambar wiring diagram yang ada, pada saat push button tidak ditekan maka tidak ada arus (input signal) yang mengalir sebagai input ke pin Arduino. Sedangkan bila ditekan maka akan ada arus (input signal) yang mengalir ke Arduino. Untuk menghindari kondisi float (suatu kondisi antara high dan low), maka push button dihubungkan dengan resistor pull down, terhubung dengan ground. Dengan demikian bila rangkaian diubah, arus terputus, limit switch akan berada dalam kondisi low.
Berikut ini adalah source code (sketch) aplikasi pencacah sederhana dengan Arduino.

/*
Program pencacah sederhana
dengan push button

Loki Lang
*/

int buttonPin = 2;
int ledPin = 13;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  buttonState = digitalRead(buttonPin);
  if(buttonState != lastButtonState)
  {
    if(buttonState == HIGH)
    {
      buttonPushCounter++;
    }
  }
  lastButtonState = buttonState;
  if(buttonPushCounter % 7 ==0)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}

Penjelasan program sebagai berikut.
  • Digunakan variable global buttonPin, ledPin, buttonPushCounter, buttonState, dan lastButtonState
  • Variable buttonPin, untuk pin Arduino (pin 2) yang terhubung dengan input push button
  • Variable ledPin, untuk pin Arduino (pin 13) dimana terdapat LED indikator sebagai output
  • Variable buttonPushCounter, untuk mencacah berapa kali push button ditekan
  • Variable buttonState, untuk menampung kondisi push button tidak ditekan bernilai low, sedangkan bila ditekan bernilai high
  • Variable lastButtonState, untuk melihat kondisi push button sebelumnya
  • Pada setup(), dilakukan inisialisasi input dan output yang digunakan
  • Variable buttonPin, untuk pin Arduino yang terhubung dengan push button
  • Setiap kali push button ditekan (high), nilainya akan dibaca oleh Arduino, dan meningkatkan nilai variable buttonPushCounter
  • Bila saat menekan push button kemudian ditahan, nilainya hanya akan dibaca sekali oleh Arduino, karena kondisi buttonState dan lastButtonState harus berbeda untuk dapat mulai mencacah
  • Setelah push button dilepas, nilai buttonState kembali low demikian dengan lastButtonState
  • Proses pencacahan dimulai, nilai buttonPushCounter akan dibagi dengan 7 (bisa disesuaikan kebutuhan), bila hasil pembagiannya tanpa sisa (sisa 0), maka ledPin akan bernilai high
  • Pada saat ledPin bernilai high, maka LED indikator di Arduino akan menyala
  • Bila jumlah pencacahan buttonPushCounter bukan kelipatan 7 (sisa pembagiannya dengan 7 tidak sama dengan 0), maka ledPin akan tetap bernilai low
Dalam project sederhana aplikasi pencacah dengan Arduino ini, selama jumlah pencacahan input belum mencapai set point (kelipatan 7), indikator output tetap bernilai low. Dengan membandingkan kondisi buttonState dengan lastButtonState, dapat mengantisipasi bila push button tersebut ditekan dan kemudian ditahan, akan tetap dianggap sekali penekanan saja.
Penggunaan push button sebagai limit switch sensor dapat digantikan dengan sensor optocoupler untuk aplikasi yang sesuai.

Arduino Tutorial Dasar LCD

Arduino Tutorial Dasar LCD
Salah satu jenis penampil yang sering digunakan ialah LCD (Liquid Crystal Display), yang memiliki banyak kelebihan dibandingkan seven segment display. Salah satu kelebihan LCD ialah menampilkan pesan text. Jenis LCD yang banyak digunakan untuk project microcontroller sederhana ialah LCD 16x2, 16 kolom dengan 2 baris.
Untuk memulai belajar menggunakan penampil LCD, terlebih dahulu dilakukan pemetaan konfigurasi wiring diagram. Hal ini ditujukan agar pin yang digunakan pada source code dan wiring diagram sesuai. Berikut ini ialah wiring diagram yang digunakan antara Arduino dengan LCD pada uji coba awal.

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


Berdasarkan gambar wiring diagram tersebut.
  • LCD RS pin dihubungkan ke digital pin 12
  • LCD Enable pin dihubungkan ke digital pin 11
  • LCD D4 pin dihubungkan ke digital pin 5
  • LCD D5 pin dihubungkan ke digital pin 4
  • LCD D6 pin dihubungkan ke digital pin 3
  • LCD D7 pin dihubungkan ke digital pin 2
Penggunaan potentiometer (variable resistor), ditujukan untuk mengatur tingkat gelap-terang tampilan LCD tersebut. Berikut ini ialah source code (sketch) sederhana untuk menampilkan pesan text.

/*
Program LCD sederhana
dengan library LiquidCrystal.h

Loki Lang
*/

#include <LiquidCrystal.h>

LiquidCrystal lang(12, 11, 5, 4, 3, 2);

void setup()
{
  lang.begin(16, 2);
}

void loop()
{
  lang.clear();
  lang.setCursor(3, 1);
  lang.print("Manchester");
  lang.setCursor(5, 1);
  lang.print("United");
}

Dalam source code tersebut digunakan macro #include preprocessed directive yang memuat library LiquidCrystal.h, untuk penampil LCD.

Proses inisialisasi pin Arduino yang terhubung ke pin LCD RS, Enable, D4, D5, D6, dan D7, dilakukan dalam baris LiquidCrystal lang(12, 11, 5, 4, 3, 2); dimana lang merupakan variable yang dipanggil setiap kali instruksi terkait LCD akan digunakan. Catatan, untuk nama variable lang dapat diubah dengan lcd atau nama lainnya, selama dalam pemanggilan namanya sesuai.

begin()
Untuk begin() digunakan dalam inisialisasi interface ke LCD dan mendefinisikan ukuran kolom dan baris LCD. Pemanggilan begin() harus dilakukan terlebih dahulu sebelum memanggil instruksi lain dalam library LCD. Untuk syntax penulisan instruksi begin() ialah sebagai berikut.
lang.begin(cols, rows)
Dengan lang ialah nama variable, cols jumlah kolom LCD, dan rows jumlah baris LCD.

clear()
Instruksi clear() digunakan untuk membersihkan pesan text. Sehingga tidak ada tulisan yang ditapilkan pada LCD.

setCursor()
Instruksi ini digunakan untuk memposisikan cursor awal pesan text di LCD. Penulisan syntax setCursor() ialah sebagai berikut.
lang.setCursor(col, row)
Dengan lang ialah nama variable, col kolom LCD, dan row baris LCD.

print()
Sesuai dengan namanya, instruksi print() ini digunakan untuk mencetak, menampilkan pesan text di LCD. Penulisan syntax print() ialah sebagai berikut.
lang.print(data)
Dengan lang ialah nama variable, data ialah pesan yang ingin ditampilkan.

Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking dan Arduino Uno LED animation.

Arduino Tutorial Dasar Serial

Arduino Tutorial Dasar Serial
Setiap board Arduino setidaknya telah memiliki satu buah serial port, yang memungkinkannya untuk melakukan proses pertukaran data dengan komputer atau perangkat lain melalui jalur komunikasi serial. Pada Arduino Uno, dengan menggunakan RX (pin 0) dan TX (pin 1) memungkinkan proses komunikasi serial tersebut. Oleh karena itu, pin 0 dan pin 1, yang sedang digunakan untuk proses pertukaran data komunikasi serial, tersebut tidak dapat digunakan sebagai pin input atau juga output.
Arduino IDE sendiri telah mencakup feature serial monitor untuk berkomunikasi dengan board Arduino. Satu hal yang perlu dicatat ialah menyesuaikan baud rate antara Arduino dengan komputer, agar proses pertukaran data antara keduanya dapat berjalan dengan baik. Agar lebih jelas mengenai baud rate, berikut penjelasannya.
Pada telekomunikasi dan elektronika, baud (dalam Bd) merupakan unit untuk merepresentasikan banyaknya modulasi atau pulse setiap satuan waktu. Dalam sistem digital, (yang menggunakan nilai discrete) dengan binary code, 1 Bd sama dengan 1 bit per second. Untuk nama unit baud ini sendiri, berasal dari Emile Baud, yang merupakan penemu dari Baudot code untuk telegrapy.
Dalam proses pertukaran data antara microcontroller dengan komputer, biasa melalui komunikasi serial. Disini kaitannya dengan baud rate, seberapa cepat data dikirimkan melalui jalur komunikasi serial tersebut. Agar dua buah perangkat, microcontroller dengan komputer dapat bertukar data dengan baik, maka baud rate antara keduanya harus setara. Biasa baud rate yang digunakan ialah 9600 bits per second. Adapun baud rate lainnya bisa bernilai 1200, 2400, 4800, 19200, 38400, 57600, dan 115200. Setiap nilai baud rate tersebut memiliki ratio perbandingan kelipatan dari baud rate standard 9600 yang biasa digunakan.
Semakin tinggi baud rate, maka semakin cepat data dikirimkan, demikian pula sebaliknya. Meski begitu tetap ada batasan nilai baud rate, bila melebihi nilai batasan tersebut maka akan terjadi error.

Selasa, 04 Agustus 2015

Arduino Tutorial Seven Segment Display

Arduino Tutorial Seven Segment Display
Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan seven segment display. Tutorial akan disusun secara bertahap mulai dari dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Adapun karena keterbatasan jumlah pin dalam board Arduino Uno, untuk menghemat resource, dapat digunakan IC 7447, decoder. Fungsi dari IC 7447 ialah sebagai decoder yang menerima input BCD 4 bit dari Arduino, dan menghasilkan output 8 bit untuk mengendalikan nyala dari seven segment display. Sehingga hanya dengan 4 pin saja (bila tanpa decoder membutuhkan 8 pin) pada Arduino Uno, sudah dapat mengendalikan nyala tampilan seven segment display. Berikut ini catatan untuk wiring diagram rangkaian.
  • Menyamakan konfigurasi wiring diagram dengan souce code
  • Untuk wiring diagram output Arduino sebagai input ke decoder IC 7447 ialah berturut-turut pin 0, pin 1, pin2, dan pin 3 masing-masing untuk input A, B, C, dan D
  • Perubahan konfigurasi wiring diagram harus disesuaikan juga dengan source code yang digunakan
  • Untuk wiring diagram dari decoder IC 7447 ke seven segment display dapat mengikuti gambar yang ada
  • Untuk decoder IC 7447, menghasilkan output active low, berkaitan dengan jenis seven segment display yang digunakan ialah common anode
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

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


Berikut ini adalah source code (sketch) seven segment display sederhana tanpa menggunakan library.

/*
Program seven segment display
tanpa library

Loki Lang
*/

void setup()
{
  DDRD = 15; //B00001111
}

void loop()
{
  PORTD = 0; //B00000000
  delay(1000);
  PORTD = 1; //B00000001
  delay(1000);
  PORTD = 2; //B00000010
  delay(1000);
  PORTD = 3; //B00000011
  delay(1000);
  PORTD = 4; //B00000100
  delay(1000);
  PORTD = 5; //B00000101
  delay(1000);
  PORTD = 6; //B00000110
  delay(1000);
  PORTD = 7; //B00000111
  delay(1000);
  PORTD = 8; //B00001000
  delay(1000);
  PORTD = 9; //B00001001
  delay(1000);
}

Penjelasan program sebagai berikut.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output. Disini DDRD diberikan nilai 15 atau sama seperti B00001111, yang mana empat buah pin diberi nilai 1, artinya pin 0, pin 1, pin 2, dan pin 3 tersebut didefinisikan sebagai port output, sementara itu pin 4, pin 5, pin 6, dan pin 7 diberikan nilai 0, maka pin tersebut didefinisikan sebagai input
  • Hanya empat buah pin yang digunakan sebagai output, dikarenakan IC 7447 cukup menerima empat masukan data untuk mengatur nyala seven segment display
  • 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 menggunakan library sebagai berikut.

/*
Program seven segment display
dengan menggunakan library

Loki Lang
*/

#include <SegDisplay.h>

#define A 0
#define B 1
#define C 2
#define D 3
#define Enable 4
SegNumbers segdisp(A, B, C, D, Enable);

void setup()
{
}

void loop()
{
  segdisp.off();
  delay(1000);
  segdisp.zero();
  delay(1000);
  segdisp.one();
  delay(1000);
  segdisp.two();
  delay(1000);
  segdisp.three();
  delay(1000);
  segdisp.four();
  delay(1000);
  segdisp.five();
  delay(1000);
  segdisp.six();
  delay(1000);
  segdisp.seven();
  delay(1000);
  segdisp.eight();
  delay(1000);
  segdisp.nine();
  delay(1000);
}

Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking dan Arduino Uno LED animation.

Arduino Tutorial LED Bitwise Operation

Arduino Tutorial LED Bitwise Operation
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.
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 digunakan untuk mendifinisikan 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, << Left Shift, dan >> Right Shift
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  byte operand1 = B00000001;
  byte operand2 = B10000000;
  byte result = operand1 | operand2;
  PORTD = result;
  delay(1000);
  for(int i = 0; i < 8; i++)
  {
    operand1 = operand1 << i;
    operand2 = operand2 >> i;
    result = operand1 | operand2;
    PORTD = result;
    delay(1000);
  }
}

Penjelasan program:
  • DDRD digunakan untuk mendifinisikan 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
  • Untuk variable operand2 dalam byte (8 bit), dengan nilai awal adalah 128, atau B10000000, yang nilai bit akan digeser ke kanan sebanyak i
  • 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
  • Dengan perulangan menggunakan variable i, dari 1 hingga 7, untuk pergeseran nilai bit ke kanan maupun ke kiri
  • Setelah itu nilai dataLed akan digeser ke kanan atau ke kiri sesuai dengan nilai i, yang akan diberikan ke PORTD sebagai nyala LED
  • 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
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kanan sama saja seperti membagi nilai bit dengan pembagi dua
Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking dan Arduino Uno LED animation.

Arduino Tutorial Dasar Bitwise

Arduino Tutorial Dasar Bitwise
Bahasa C yang sederhana digunakan pada Arduino, menjadikannya mudah untuk dipelajari baik oleh pemula, pelajar, mahasiswa, dari mulai untuk project sederhana hingga tugas akhir kuliah. Bahasa C menawarkan operasi manipulasi bit, yang mana pada Arduino bisa sangat berguna untuk mengubah suatu nilai bit dalam data yang berupa byte. Implementasi nyata pada Arduino ialah pada manipulasi nilai pin-pin Arduino berubah dari kondisi high menjadi low, atau sebaliknya. Dalam hal ini operasi manipulasi bit dimungkinkan dengan penerapan gerbang logika atau operasi fungsi logika yang disebut bitwise. Untuk operasi bitwise standard yang biasa digunakan ialah & (AND), | (OR), << (Left Shift) menggeser nilai bit ke kiri, dan >> (Right Shift) menggeser nilai bit ke kanan.

AND
Fungsi operasi logika AND dari dua buah operand akan menghasilkan output dengan logika 1, high, hanya pada saat kedua bit pada tingkat yang sama juga bernilai logika 1, high. Selain itu akan menghasilkan output dengan logika 0, low. Berikut ini adalah contoh potongan sktech Arduino.

byte operand1 = B00001111;
byte operand2 = B01010101;
byte result = operand1 & operand2;

Penjelasannya sebagai berikut.
  • Nilai operand1 dengan tipe data byte ialah 00001111
  • Nilai operand2 dengan tipe data byte ialah 01010101
  • Nilai result dengan tipe data byte ialah hasil operasi AND byte dari operand1 dengan operand2


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


OR
Fungsi operasi logika OR dari dua buah operand akan menghasilkan output dengan logika 1, high, hanya pada saat salah satu atau kedua bit pada tingkat yang sama bernilai logika 1, high. Selain bila kedua bit pada tingkat yang sama bernilai logika 0, low maka akan menghasilkan output dengan logika 0, low. Berikut ini adalah contoh potongan sktech Arduino.

byte operand1 = B00001111;
byte operand2 = B01010101;
byte result = operand1 | operand2;

Penjelasannya sebagai berikut.
  • Nilai operand1 dengan tipe data byte ialah 00001111
  • Nilai operand2 dengan tipe data byte ialah 01010101
  • Nilai result dengan tipe data byte ialah hasil operasi OR byte dari operand1 dengan operand2


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


<< Left Shift
Fungsi dari bitwise << ialah menggeser nilai-nilai bit ke kiri. Menggeser nilai-nilai bit ke kiri, akan menghasilkan output yang bernilai dua kali lipat dari operand awalnya. Berikut ini adalah contoh potongan sktech Arduino.

int i = 2;
byte operand = B00001111;
byte result = operand << i;

Penjelasannya sebagai berikut.
  • Nilai operand dengan tipe data byte ialah 00001111
  • Nilai result dengan tipe data byte ialah hasil pergeseran bit dari operand ke kiri sebanyak i, yakni 2 kali


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


>> Right Shift
Fungsi dari bitwise >> ialah menggeser nilai-nilai bit ke kanan. Menggeser nilai-nilai bit ke kanan, akan menghasilkan output yang bernilai separuh dari operand awalnya. Berikut ini adalah contoh potongan sktech Arduino.

int i = 2;
byte operand = B01100000;
byte result = operand >> i;

Penjelasannya sebagai berikut.
  • Nilai operand dengan tipe data byte ialah 01100000
  • Nilai result dengan tipe data byte ialah hasil pergeseran bit dari operand ke kanan sebanyak i, yakni 2 kali


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


Lihat juga mengenai implementasinya dalam program Arduino LED bitwise operation.

Senin, 03 Agustus 2015

Arduino Tutorial LED Animation

Arduino Tutorial LED Animation
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 tingkat 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. Untuk 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.
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 LED animation, nyala LED bergeser dari LSB (Least Significant Bit) ke MSB (Most Significant Bit), yang mana dikonfigurasikan bahwa pin 0 Arduino Uno sebagai LSB dan pin 7 sebagai MSB.

/*
Program LED animation

LED menyala dari LSB ke MSB
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int i = 1; i <= 7; i++)
  {
    PORTD = dataLed << i;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • 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 dataLed dalam byte (8 bit), dengan nilai awal adalah 1, atau B00000001, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable i, dari 1 hingga 7, untuk pergeseran nilai bit ke kiri
  • Setelah itu nilai dataLed akan digeser ke kiri sesuai dengan nilai i, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 1, B00000001, digeser satu kali ke kiri (i = 1), maka nilai dataLed menjadi 2, atau B00000010
  • 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
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kiri sama saja seperti mengalikan nilai bit dengan pengali dua
  • Nyala LED akan berubah mulai LSB, pin 0 Arduino Uno, menuju MSB, pin 7
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 ke LSB, atau dari LED yang terhubung dengan pin 7 Arduino Uno ke pin 0.

/*
Program LED animation

LED menyala dari MSB ke LSB 
Loki Lang
*/
void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int i = 1; i <= 7; i++)
  {
    PORTD = dataLed >> i;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • 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 dataLed dalam byte (8 bit), dengan nilai awal adalah 128, atau B10000000, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable i, dari 1 hingga 7, untuk pergeseran nilai bit ke kanan
  • Setelah itu nilai dataLed akan digeser ke kanan sesuai dengan nilai i, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 128, B10000000, digeser satu kali ke kanan (i = 1), maka nilai dataLed menjadi 64, atau B01000000
  • 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 atau sama dengan 1 detik
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kanan sama saja seperti membagi nilai bit dengan pembagi dua
  • Nyala LED akan berubah mulai MSB, pin 7 Arduino Uno, menuju LSB, pin 0
Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking.