const int rowLED[] = {22, 23, 24, 25, 26, 27, 28, 29};
const int colLED[] = {37, 36, 35, 34, 33, 32, 31, 30};
int encoderCLK = 2;
int encoderDT = 3;
int encoderSW = 4;
int encoderCLKState = LOW;
int encoderCLKLastState = LOW;
int encoderDTState = LOW;
int currentX = 0;
int currentY = 0;
bool direction = true; // true: ileri, false: geri
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(rowLED[i], OUTPUT);
pinMode(colLED[i], OUTPUT);
}
pinMode(encoderCLK, INPUT_PULLUP);
pinMode(encoderDT, INPUT_PULLUP);
pinMode(encoderSW, INPUT_PULLUP);
Serial.begin(9600);
drawLEDMatrix();
}
void setPixel(int x, int y) {
digitalWrite(rowLED[y], HIGH);
digitalWrite(colLED[x], LOW);
}
void clearPixel(int x, int y) {
digitalWrite(rowLED[y], LOW);
digitalWrite(colLED[x], HIGH);
}
void drawLEDMatrix() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
clearPixel(col, row);
}
}
}
void loop() {
encoderCLKState = digitalRead(encoderCLK);
if (encoderCLKState != encoderCLKLastState) {
if (digitalRead(encoderDT) != encoderCLKState) {
if (direction) {
clearPixel(currentX, currentY);
currentX++;
if (currentX >= 8) {
currentX = 0;
direction = !direction;
currentY++;
if (currentY >= 8) {
currentY = 0;
}
}
setPixel(currentX, currentY);
} else {
clearPixel(currentX, currentY);
currentX--;
if (currentX < 0) {
currentX = 7;
direction = !direction;
currentY--;
if (currentY < 0) {
currentY = 7;
}
}
setPixel(currentX, currentY);
}
}
}
encoderCLKLastState = encoderCLKState;
if (digitalRead(encoderSW) == LOW) {
// Enkoder düğmesine basıldığında hareket yönünü değiştir
direction = !direction;
delay(100); // Rötuş
}
}