#include "LedControl.h"
#include "binary.h"
#define DIN 3
#define CS 4
#define CLK 5
#define DEV 1 // Jumlah perangkat
LedControl lc = LedControl(DIN, CLK, CS, DEV);
// Array teks untuk running text
const char *text[] = {"HELLO", "WORLD", "LED MATRIX", "RUNNING TEXT"};
int textIndex = 0; // Indeks teks
int position = 7; // Posisi awal teks
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 8); // Set brightness (0-15)
lc.clearDisplay(0);
}
void loop() {
// Menampilkan emotikon
displaySmiley();
delay(2000);
displaySadFace();
delay(2000);
displaySurprisedFace();
delay(2000);
// Running text
for (int i = 0; i < 50; i++) {
displayText(text[textIndex]);
position--; // Geser teks ke kiri
if (position < -strlen(text[textIndex]) * 6) {
position = 7; // Reset posisi
textIndex = (textIndex + 1) % (sizeof(text) / sizeof(text[0])); // Ganti teks
}
delay(150);
}
lc.clearDisplay(0);
delay(1000);
}
// Fungsi untuk menampilkan emotikon senyum
void displaySmiley() {
lc.setRow(0, 0, B00111100); // Baris 0
lc.setRow(0, 1, B01000010); // Baris 1
lc.setRow(0, 2, B01000010); // Baris 2
lc.setRow(0, 3, B00000000); // Baris 3
lc.setRow(0, 4, B01111110); // Baris 4
lc.setRow(0, 5, B00000000); // Baris 5
lc.setRow(0, 6, B01000010); // Baris 6
lc.setRow(0, 7, B00111100); // Baris 7
}
// Fungsi untuk menampilkan emotikon sedih
void displaySadFace() {
lc.setRow(0, 0, B00111100);
lc.setRow(0, 1, B01000010);
lc.setRow(0, 2, B01000010);
lc.setRow(0, 3, B00000000);
lc.setRow(0, 4, B10000001); // Senyum ke bawah
lc.setRow(0, 5, B01111110);
lc.setRow(0, 6, B00000000);
lc.setRow(0, 7, B00111100);
}
// Fungsi untuk menampilkan emotikon kaget
void displaySurprisedFace() {
lc.setRow(0, 0, B00111100);
lc.setRow(0, 1, B01000010);
lc.setRow(0, 2, B00000000);
lc.setRow(0, 3, B00000000);
lc.setRow(0, 4, B01111110);
lc.setRow(0, 5, B01000010);
lc.setRow(0, 6, B00111100);
lc.setRow(0, 7, B00000000);
}
// Fungsi untuk menampilkan running text
void displayText(const char *msg) {
lc.clearDisplay(0); // Bersihkan tampilan
for (int i = 0; i < strlen(msg); i++) {
displayChar(msg[i], position + (i * 6));
}
}
// Fungsi untuk menampilkan karakter pada matrix
void displayChar(char c, int pos) {
byte charMap[8] = {0}; // Array untuk menyimpan karakter
// Set character map (6x8)
switch(c) {
case 'H':
charMap[0] = B01000100;
charMap[1] = B01000100;
charMap[2] = B01000100;
charMap[3] = B01111110;
charMap[4] = B01000100;
charMap[5] = B01000100;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'E':
charMap[0] = B01111110;
charMap[1] = B01000000;
charMap[2] = B01111100;
charMap[3] = B01000000;
charMap[4] = B01111110;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'L':
charMap[0] = B01111110;
charMap[1] = B01000000;
charMap[2] = B01000000;
charMap[3] = B01000000;
charMap[4] = B00000000;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'O':
charMap[0] = B00111100;
charMap[1] = B01000010;
charMap[2] = B01000010;
charMap[3] = B01000010;
charMap[4] = B00111100;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'W':
charMap[0] = B01000100;
charMap[1] = B01000100;
charMap[2] = B01010100;
charMap[3] = B00111000;
charMap[4] = B00000000;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'R':
charMap[0] = B01111110;
charMap[1] = B01000010;
charMap[2] = B01111110;
charMap[3] = B01000010;
charMap[4] = B01000010;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'D':
charMap[0] = B01111100;
charMap[1] = B01000010;
charMap[2] = B01000010;
charMap[3] = B01000010;
charMap[4] = B01111100;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'M':
charMap[0] = B01000100;
charMap[1] = B01010100;
charMap[2] = B01111110;
charMap[3] = B01000100;
charMap[4] = B01000100;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
case 'X':
charMap[0] = B01000100;
charMap[1] = B00101000;
charMap[2] = B00010000;
charMap[3] = B00101000;
charMap[4] = B01000100;
charMap[5] = B00000000;
charMap[6] = B00000000;
charMap[7] = B00000000;
break;
default:
// Karakter tidak dikenal, kosongkan
memset(charMap, 0, sizeof(charMap));
break;
}
// Tampilkan karakter di matrix
for (int i = 0; i < 8; i++) {
if (pos >= 0 && pos < 8) {
lc.setRow(0, pos + i, charMap[i]);
}
}
}