#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#define MATRIX_WIDTH 7 // Lebar matriks
#define MATRIX_HEIGHT 12 // Tinggi matriks
#define PIN 3 // Pin untuk menghubungkan matriks
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(MATRIX_WIDTH, MATRIX_HEIGHT, PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
void setup() {
matrix.begin();
matrix.show(); // Bersihkan matriks
}
void loop() {
for (int col = 0; col < MATRIX_WIDTH; col++) {
// Jika kolom genap, gambar pixel dari atas ke bawah
if (col % 2 == 0) {
for (int i = 0; i < MATRIX_HEIGHT; i++) {
matrix.drawPixel(col, i, matrix.Color(255, 0, 0));
matrix.show();
delay(200);
}
}
// Jika kolom ganjil, gambar pixel dari bawah ke atas
else {
for (int i = MATRIX_HEIGHT - 1; i >= 0; i--) {
matrix.drawPixel(col, i, matrix.Color(255, 0, 0));
matrix.show();
delay(200);
}
}
}
run();
}
void run() {
for (int i = 0; i < 84; i++) { // Loop dari 0 hingga 83 (84 piksel)
matrix.clear(); // Bersihkan matriks
// Hitung posisi piksel berdasarkan zigzag
int row = i / MATRIX_WIDTH; // Menentukan baris
int col = (row % 2 == 0) ? (i % MATRIX_WIDTH) : (MATRIX_WIDTH - 1 - (i % MATRIX_WIDTH)); // Menentukan kolom
// Menghidupkan LED pada posisi yang dihitung
matrix.drawPixel(col, row, matrix.Color(255, 0, 0)); // Merah
matrix.show(); // Tampilkan perubahan
delay(100); // Delay untuk efek gerakan
}
// Setelah mencapai akhir, kembali ke awal
for (int i = 83; i >= 0; i--) { // Loop mundur dari 83 hingga 0
matrix.clear();
// Hitung posisi piksel berdasarkan zigzag
int row = i / MATRIX_WIDTH; // Menentukan baris
int col = (row % 2 == 0) ? (i % MATRIX_WIDTH) : (MATRIX_WIDTH - 1 - (i % MATRIX_WIDTH)); // Menentukan kolom
// Menghidupkan LED pada posisi yang dihitung
matrix.drawPixel(col, row, matrix.Color(255, 0, 255)); // Merah
matrix.show();
delay(100);
}
}