#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 2
#define ROWS 8
#define COLS 8
#define NUM_PIXELS (ROWS * COLS)
Adafruit_NeoPixel matrix(NUM_PIXELS, MATRIX_PIN, NEO_GRB + NEO_KHZ800);
// Pola bitmap 5x7 untuk angka 0 sampai 9
const byte digits[10][7] = {
{0b01110, 0b10001, 0b10001, 0b10001, 0b10001, 0b10001, 0b01110}, // 0
{0b00100, 0b01100, 0b00100, 0b00100, 0b00100, 0b00100, 0b01110}, // 1
{0b01110, 0b10001, 0b00001, 0b00110, 0b01000, 0b10000, 0b11111}, // 2
{0b01110, 0b10001, 0b00001, 0b00110, 0b00001, 0b10001, 0b01110}, // 3
{0b00010, 0b00110, 0b01010, 0b10010, 0b11111, 0b00010, 0b00010}, // 4
{0b11111, 0b10000, 0b11110, 0b00001, 0b00001, 0b10001, 0b01110}, // 5
{0b00110, 0b01000, 0b10000, 0b11110, 0b10001, 0b10001, 0b01110}, // 6
{0b11111, 0b00001, 0b00010, 0b00100, 0b01000, 0b01000, 0b01000}, // 7
{0b01110, 0b10001, 0b10001, 0b01110, 0b10001, 0b10001, 0b01110}, // 8
{0b01110, 0b10001, 0b10001, 0b01111, 0b00001, 0b00010, 0b01100} // 9
};
// Konversi koordinat (x, y) ke indeks pixel
// Catatan: Jika susunan matriks berbentuk Zig-Zag (Snake), ubah bagian x & y ini
int getPixelIndex(int x, int y) {
return y * COLS + x;
}
void displayDigit(int num, uint32_t color) {
matrix.clear(); // Bersihkan layar sebelum menampilkan angka baru
// Offset x=1, y=0 untuk menempatkan pola 5x7 tepat di tengah matriks 8x8
int offsetX = 1;
int offsetY = 0;
for (int row = 0; row < 7; row++) {
for (int col = 0; col < 5; col++) {
// Cek bit pada posisi (col, row)
if ((digits[num][row] >> (4 - col)) & 0x01) {
int index = getPixelIndex(col + offsetX, row + offsetY);
matrix.setPixelColor(index, color);
}
}
}
matrix.show();
}
void setup() {
matrix.begin();
matrix.setBrightness(40); // Atur kecerahan (0 - 255) agar tidak terlalu silau
matrix.show();
}
int count = 0;
void loop() {
// Tampilkan angka dengan warna Biru: matrix.Color(red, green, blue)
displayDigit(count, matrix.Color(0, 0, 150));
// Naikkan counter 0-9
count = (count + 1) % 10;
delay(1000); // Tunda 1 detik tiap angka
}