FatihBugra43
Hectopat
- Katılım
- 25 Şubat 2020
- Mesajlar
- 10
1. sınıf eem öğrencisiyim hoca proje ödevi verdi. Xox oyunu yapmayı planlıyorum genel olarak çoğu şeyim hazır fakat simülasyonda devreyi çalıştıramıyorum ve birkaç sorum var.
- LED'leri Green ve red olacak şekilde seçtim, akımı +dan - ye olacak şekilde ayarlarsan yeşil -den + ya olacak şekilde ayarlarsan kırmızı yanıyor.
Bunu kodlama ile halledebilir miyim? Olmuyorsa RGB LED'leri transistör vesaire kullanarak 2 ayrı pin değil de tek bir pin olarak kullanabilir miyim basit bir yöntemi var mı? - Bir de neden çalışmadağını anlayamadım koddamı sıkıntı var yoksa devrenin kendisinde mi?
Kodlar ektedir.
Kod:
#include <Keypad.h>
const byte ROWS = 4; // Dört satır.
const byte COLS = 3; // Üç sütun.
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','='}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Keypad satır pinleri.
byte colPins[COLS] = {5, 4, 3}; // Keypad sütun pinleri.
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int ledPins[9] = {2, 10, 11, 12, 13, A5, A4, A3, A2}; // LED pinleri.
int potPin = A4; // Potansiyometre pini.
int brightness = 255; // LED parlaklığı (0-255)
bool systemOn = false; // Sistem durumu.
int playerTurn = 1; // Oyuncu sırası (1 veya 2)
int board[9] = {0}; // Oyun tahtası durumu (0: boş, 1: oyuncu 1, 2: oyuncu 2)
void setup() {
for (int i = 0; i < 9; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(potPin, INPUT);
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '*') {
systemOn = !systemOn;
if (!systemOn) {
resetGame();
}
} else if (systemOn) {
if (key == '=') {
resetGame();
} else {
handleKeyPress(key);
}
}
}
if (systemOn) {
brightness = map(analogRead(potPin), 0, 1023, 0, 255);
for (int i = 0; i < 9; i++) {
analogWrite(ledPins[i], board[i] == 0 ? 0 : brightness);
}
}
}
void handleKeyPress(char key) {
int index = key - '1';
if (index >= 0 && index < 9 && board[index] == 0) {
board[index] = playerTurn;
if (checkWin(playerTurn)) {
blinkWinner(playerTurn);
resetGame();
} else {
playerTurn = 3 - playerTurn; // Oyuncu sırasını değiştir.
}
}
}
void resetGame() {
for (int i = 0; i < 9; i++) {
board[i] = 0;
digitalWrite(ledPins[i], LOW);
}
playerTurn = 1;
}
bool checkWin(int player) {
int winPatterns[8][3] = {
{0, 1, 2}, // Yatay.
{3, 4, 5}, // Yatay.
{6, 7, 8}, // Yatay.
{0, 3, 6}, // Dikey.
{1, 4, 7}, // Dikey.
{2, 5, 8}, // Dikey.
{0, 4, 8}, // Çapraz.
{2, 4, 6} // Çapraz.
};
for (int i = 0; i < 8; i++) {
if (board[winPatterns[i][0]] == player &&
board[winPatterns[i][1]] == player &&
board[winPatterns[i][2]] == player) {
return true;
}
}
return false;
}
void blinkWinner(int player) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
if (board[j] == player) {
digitalWrite(ledPins[j], HIGH);
}
}
delay(500);
for (int j = 0; j < 9; j++) {
if (board[j] == player) {
digitalWrite(ledPins[j], LOW);
}
}
delay(500);
}
}