Membuat emoticon menggunakan LED Matrix 8X8

Baiklah, kali ini kita bikin proyek Arduino sederhana membuat emoticon menggunakan LED Matrix. Kalau belum membaca, silakan baca dahulu pengantar tentang LED MAtrix di sini http://www.rustamaji.net/id/arduino/proyek-arduino-sederhana-menggunakan-led-dot-matrix-8x8

Kita perlu 16 PIN output Arduino?

What??? 16??? Bukankah Arduino cuma punya PIN 0 sd PIN 13? (14 PIN) digital?

Tenang, kita bisa memanfatkan PIN Analog A0..A5  sebagai PIN Output Digital juga (PIN 16...21)

Baiklah kita pasang PIN sbb:

Sebetulnya bebas saja sih gimana pasangnya toh PIN output bisa kita program terserah kita, tapi agar mudah pemasangannya kita ikuti saja PIN breakout di bawah ini.

 

Matrix pin no.

Row

Column

Arduino pin number

1

5

-

13

2

7

-

12

3

-

2

11

4

-

3

10

5

8

-

16 (analog pin 2)

6

-

5

17 (analog pin 3)

7

6

-

18 (analog pin 4)

8

3

-

19 (analog pin 5)

9

1

-

2

10

-

4

3

11

-

6

4

12

4

-

5

13

-

1

6

14

2

-

7

15

-

7

8

16

-

8

9

 

Sekarang programnya, saya jelaskan dulu

Pertama kita siapkan constanta utk menyimpan PIN baris dan kolom berupa array yang berisi PIN output sesuai table di atas

const row[8] = {2, 7, 19, 5, 13, 18, 12, 16};
const col[8] = {6, 11, 10, 3, 17, 4, 8, 9};

Dengan array ini, jika kita ingin mengirim signal HIGH ke baris 1 dan kolom 2 kita bisa tuliskan

digitalWrite(row[0]),HIGH);
digital(col[1],HIGH);

Perhatikan bahwa indeks array selalu dimulai dari 0. Jadi baris ke 1,2,3... ditulis row[0], row[1], row[2], dst

Kita perlu menyimpan status masing-masing lampu, HIDUP atau MATI. Untuk mudahnya, kita akan buat suatu variable integer dala bentuk array 2 -dimensi sbb

int pixels[8][8];

Dengan array tersebut, jika kita ingin menyalakan LED baris ke 3 kolom ke 4, misalnya kita cukup tulis pixels[2][3] = LOW

 
void setup() {
  //pertama-tama set row dan col sebagai OUTPUT
  for (int i=0; i<8; i++) {
     pinMode(col[i], OUTPUT);
     pinMode(row[i], OUTPUT);
     digitalWrite(col[i], HIGH); //set kondisi awal HIGH utk semua kolom agar led tidak menyala
  }

   // initialize the pixel matrix
  for (int x = 0; x < 8; x++) {
     for (int y = 0; y<8; y++) {
       pixels[x][y] = HIGH;
     }
}

Selanjutnya kita buat suatu fungsi (subrutin) untuk menyalakan LED; kita akan melakukan iterasi baris dan kolom satu persatu sbb

void nyalakanLED() {
   for (int thisRow = 0; thisRow < 8; thisRow++) {
      digitalWrite(row[thisRow], HIGH);
      for (int thisCol = 0; thisCol <8; thisCol++) {
         int thisPixel = pixels[thisRow][thisCol];
         digitalWrite(col[thisCol], thisPixel);
         if (thisPixel == LOW) {
            digitalWrite(col[thisCol], HIGH);
         }
      } 
     digitalWrite(row[thisRow], LOW);
  }
}

Perhatikan bahwa subrutin ini akan mengambil nilai pixel[i][j] satu per satu dan menyalakan/mematikan LED baris ke-i kolom ke-j sesuai nilai pixels[i][j]

Selanjutnya kita tinggal siapkan LED yang mana saja yang harus dinyalakan, dengan cara memberinya tegangan 0V (LOW).

Sebagai contoh, untuk membuat lambang hati (heart) seperti pada gambar di atas maka LED berikut yang dinyalakan

pixels[0][3],  pixels[0][4],  pixels[0][5],  pixels[1][6],  pixels[1][2],  pixels[2][6],  pixels[2][1],  pixels[3][5],  pixels[3][0],  pixels[4][6],  pixels[4][1],  pixels[5][6],  pixels[5][2],  pixels[6][5], pixels[6][4],  pixels[6][3]

Dan program kita menjadi

void loop() {
    pixels[0][3] = LOW;
    pixels[0][4] = LOW;
    pixels[0][5] = LOW;
    pixels[1][6] = LOW;
    pixels[1][2] = LOW;
    pixels[2][6] = LOW;
    pixels[2][1] = LOW;
    pixels[3][5] = LOW;
    pixels[3][0] = LOW;
    pixels[4][6] = LOW;
    pixels[4][1] = LOW;
    pixels[5][6] = LOW;
    pixels[5][2] = LOW;
    pixels[6][5] = LOW;
    pixels[6][4] = LOW;
    pixels[6][3] = LOW;

   nyalakanLED();
}

Berikut ini adalah beberapa contoh icon yang bisa dibuat

Source Code: 
LampiranUkuran
Package icon led_matrix_love_statis.zip796 byte
Komponen: 
Bahasa Indonesia