#include <Adafruit_GFX.h>
#include <MD_MAX72xx.h>
const int buttonPin = 2; // Pin untuk tombol
int buttonState = 0; // Status tombol
int lastButtonState = 0; // Status tombol sebelumnya
const int led1 = 3;
const int led2 = 4;
const int led3 = 5;
const int led4 = 6;
int currentStep = 0; // Step untuk kondisi tombol
// Konfigurasi Max72xxPanel
Max72xx matrix = Max72xx(7, 1, 1); // Pin CS pada 7, 1 row, 1 column
void setup() {
// Konfigurasi pin tombol dan LED
pinMode(buttonPin, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
// Inisialisasi matrix
matrix.setIntensity(5); // Kecerahan (0-15)
matrix.setRotation(0, 1); // Rotasi layar jika dibutuhkan
matrix.fillScreen(LOW); // Kosongkan layar awal
matrix.write();
// Matikan semua LED saat awal
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
void loop() {
buttonState = digitalRead(buttonPin);
// Deteksi tombol ditekan (rising edge)
if (buttonState == HIGH && lastButtonState == LOW) {
delay(50); // Debounce
currentStep++;
if (currentStep > 3) {
currentStep = 1;
}
}
lastButtonState = buttonState; // Simpan status tombol sebelumnya
// Jalankan aksi sesuai step
switch (currentStep) {
case 1:
displayText("Nama", 1); // Teks "Nama" dari kiri ke kanan
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
break;
case 2:
displayText("NIM", -1); // Teks "NIM" dari kanan ke kiri
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
break;
case 3:
matrix.fillScreen(LOW); // Kosongkan layar
matrix.write();
digitalWrite(led4, HIGH); // Hanya LED 4 yang menyala
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
break;
}
}
// Fungsi untuk menampilkan teks di dot matrix
void displayText(String text, int direction) {
matrix.fillScreen(LOW);
int textLength = text.length() * 6; // Lebar teks (6 piksel per karakter)
int position = (direction == 1) ? matrix.width() : -textLength; // Start position
while ((direction == 1 && position > -textLength) || (direction == -1 && position < matrix.width())) {
matrix.fillScreen(LOW);
matrix.setCursor(position, 0);
matrix.print(text);
matrix.write();
position += direction; // Gerakan teks ke kiri atau kanan
delay(100);
}
}