// Pin tanımlamaları
const int matrixSize = 8; // 8x8 dot matrix
const int encoderPinA = 2;
const int encoderPinB = 3;
const int encoderButtonPin = 4;
// Dot Matrix sütunlarını temsil eden pinler
const int columnPins[] = {0,1,6,7,8,9,10,11};
// Dot Matrix satırlarını temsil eden pinler
const int rowPins[] = {0,1,6,7,8,9,10,11,12,14,15,17,18,19,13,16};
// Dot Matrix içindeki piksel değerleri
bool matrix[matrixSize][matrixSize] = {0};
// Enkoder durumu ve pozisyonu
int encoderPosition = 0;
int encoderButtonState = LOW;
int lastEncoderButtonState = LOW;
bool direction = 0;
void setup() {
// Pin modlarını ayarla
for (int i = 0; i < 8; i++) {
pinMode(columnPins[i], OUTPUT);
pinMode(rowPins[i], OUTPUT);
}
pinMode(encoderPinA, INPUT_PULLUP);
pinMode(encoderPinB, INPUT_PULLUP);
pinMode(encoderButtonPin, INPUT_PULLUP);
// Dot Matrix'i temizle
clearMatrix();
// Dot Matrix'i güncelle
updateMatrix();
}
void loop() {
// Enkoder buton durumunu oku
encoderButtonState = digitalRead(encoderButtonPin);
// Enkoder butonuna basıldıysa, matrix'i temizle
if (encoderButtonState == LOW && lastEncoderButtonState == HIGH) {
clearMatrix();
encoderPosition = 0;
}
// Enkoder pozisyonunu oku
int encoderA = digitalRead(encoderPinA);
int encoderB = digitalRead(encoderPinB);
if (encoderA != encoderB) {
direction = (encoderA == HIGH) ? 1 : -1;
encoderPosition += direction;
delay(10); // De-bounce süresi
}
// Dot Matrix'i güncelle
updateMatrix();
// Enkoder pozisyonunu sınırla
if (encoderPosition < 0) {
encoderPosition = 0;
}
if (encoderPosition > 63) { // 8x8 matrisin toplam piksel sayısı
encoderPosition = 63;
}
lastEncoderButtonState = encoderButtonState;
}
void clearMatrix() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
matrix[row][col] = false;
}
}
}
void updateMatrix() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
if (row * 8 + col <= encoderPosition) {
matrix[row][col] = true;
} else {
matrix[row][col] = false;
}
}
}
for (int row = 0; row < 8; row++) {
digitalWrite(rowPins[row], LOW); // Satırı kapat
for (int col = 0; col < 8; col++) {
digitalWrite(columnPins[col], matrix[row][col]); // Sütunu aç veya kapat
}
delay(1); // Ekranda akıcı bir şekilde değişiklik yapmak için küçük bir gecikme
digitalWrite(rowPins[row], HIGH); // Satırı aç
}
}