Bu rehberde, Arduino Uno, MAX7219 8×8 dot matrix display ve XY joystick modülü kullanarak adım adım bir yılan oyunu projesi geliştireceksiniz. Kod ve bağlantıları tamamen başlangıç seviyesine uygun olarak hazırladık; daha önce benzer bir proje yapmasanız bile rahatça takip edebilirsiniz.

Aşağıdaki tabloda her bir modülün Arduino üzerindeki pinleri ile eşleştirmesini görebilirsiniz:
| Bileşen | Arduino Pin | Modül Pin |
| MAX7219 DIN | 11 | DIN |
| MAX7219 CLK | 13 | CLK |
| MAX7219 CS | 10 | CS |
| Joystick VRx | A0 | VRx |
| Joystick VRy | A1 | VRy |
| Joystick VCC | 5V | VCC |
| Joystick GND | GND | GND |
Not: Breadboard üzerinde düzenli bir yerleşim yaparak, kabloların kısa ve düzenli kalmasına dikkat edin.

Aşağıdaki kodu Arduino IDE’ye yapıştırın ve Yükle butonuna tıklayın:
cppCopyEdit#include <LedControl.h>
// Dot Matrix bağlantıları (MAX7219)
const int DIN_PIN = 11;
const int CS_PIN = 10;
const int CLK_PIN = 13;
LedControl matrix = LedControl(DIN_PIN, CLK_PIN, CS_PIN, 1);
// Joystick pinleri
const int VRx = A0;
const int VRy = A1;
// Yılan pozisyonlarını tutan dizi (maksimum 64 hücre)
int snake[64][2];
int snakeLength = 3;
// Hareket yönü (başlangıç: sağ)
int dirX = 1;
int dirY = 0;
// Yem pozisyonu
int foodX = 5;
int foodY = 5;
// Zaman kontrolü
unsigned long lastMove = 0;
int moveDelay = 300; // ms cinsinden hız
void setup() {
matrix.shutdown(0, false);
matrix.setIntensity(0, 8);
matrix.clearDisplay(0);
snake[0][0] = 2; snake[0][1] = 4;
snake[1][0] = 1; snake[1][1] = 4;
snake[2][0] = 0; snake[2][1] = 4;
randomSeed(analogRead(0));
placeFood();
}
void loop() {
readJoystick();
if (millis() - lastMove > moveDelay) {
lastMove = millis();
moveSnake();
drawSnake();
}
}
void readJoystick() {
int xVal = analogRead(VRx);
int yVal = analogRead(VRy);
if (xVal < 300) { dirX = -1; dirY = 0; }
else if (xVal > 700) { dirX = 1; dirY = 0; }
else if (yVal < 300) { dirX = 0; dirY = -1; }
else if (yVal > 700) { dirX = 0; dirY = 1; }
}
void moveSnake() {
int newX = snake[0][0] + dirX;
int newY = snake[0][1] + dirY;
if (newX < 0 || newX > 7 || newY < 0 || newY > 7) {
resetGame();
return;
}
bool grow = false;
if (newX == foodX && newY == foodY) {
grow = true;
snakeLength++;
placeFood();
}
for (int i = snakeLength - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
snake[0][0] = newX;
snake[0][1] = newY;
}
void drawSnake() {
matrix.clearDisplay(0);
for (int i = 0; i < snakeLength; i++) {
matrix.setLed(0, snake[i][1], snake[i][0], true);
}
matrix.setLed(0, foodY, foodX, true);
}
void placeFood() {
foodX = random(0, 8);
foodY = random(0, 8);
}
void resetGame() {
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
matrix.setLed(0, row, col, true);
delay(1000);
matrix.clearDisplay(0);
snakeLength = 3;
snake[0][0] = 2; snake[0][1] = 4;
snake[1][0] = 1; snake[1][1] = 4;
snake[2][0] = 0; snake[2][1] = 4;
dirX = 1; dirY = 0;
placeFood();
}
İyi eğlenceler! Bu basit ama eğlenceli proje ile elektronik ve yazılım becerilerinizi bir arada kullanarak kendi yılan oyununuzu oluşturabilirsiniz.