LED'lerinizin doğru çalışmasını sağlamak için bazı donanım ve yazılım ayarlamaları yapmanız gerekecek. Öncelikle, LED'lerin yeşil veya kırmızı yanması için nasıl bağlandıklarını anlamamız önemli. Yeşil ve kırmızı LED'lerin, akım yönüne göre renk değiştirdiklerini söylediniz. Bu durumda, LED'leri iki yönlü olarak kontrol edebilmek için bir h-köprüsü kullanabilir veya iki ayrı pinle kontrol edebilirsiniz.
LED'leri iki ayrı pinle kontrol etmek en basit yöntemdir. Aşağıda, iki pinle LED kontrolü ve devre ile ilgili ipuçları bulunmaktadır:
donanım ayarları
- LED bağlantısı:
- Her bir LED için iki adet pin kullanarak, bir PIN'i anotta, diğer PIN'i katotta bağlayarak kontrol edebilirsiniz.
- Örneğin:
- yeşil LED: Anot pinine +5v, katot pinine direnç üzerinden Arduino PIN'i.
- kırmızı LED: Anot pinine Arduino PIN'i, katot pinine direnç üzerinden gnd.
- transistör kullanımı:
- Eğer LED'leri daha karmaşık bir devreyle kontrol etmek istiyorsanız, transistörler ve h-köprüsü kullanarak da yapabilirsiniz. Ancak bu, basitlik açısından gereksiz olabilir.
yazılım ayarları
Kodunuzu LED'lerin doğru şekilde yanmasını sağlamak için düzenleyeceğiz. İşte iki pinle kontrol edilen LED'lerin nasıl çalışacağını gösteren örnek bir kod:
#İnclude <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);
İnt ledgreenpins[9] = {2, 10, 11, 12, 13, A5, A4, A3, A2}; // yeşil LED pinleri.
İnt ledredpins[9] = {A1, a0, 1, 0, 19, 18, 17, 16, 15}; // kırmızı LED pinleri.
İnt potpin = A4; // potansiyometre PIN'i.
İnt brightness = 255; // LED parlaklığı (0-255)
Bool systemon = false; // sistem durumu.
İnt playerturn = 1; // oyuncu sırası (1 veya 2)
İnt board[9] = {0}; // oyun tahtası durumu (0: Boş, 1: Oyuncu 1, 2: Oyuncu 2)
Void setup() {
For (int i = 0; i < 9; i++) {
Pinmode(ledgreenpins
, output);
pinmode(ledredpins, output);
}
pinmode(potpin, ınput);
}
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++) {
if (board == 0) {
analogwrite(ledgreenpins, 0);
analogwrite(ledredpins, 0);
} else if (board == 1) {
analogwrite(ledgreenpins, brightness);
analogwrite(ledredpins, 0);
} else if (board == 2) {
analogwrite(ledgreenpins, 0);
analogwrite(ledredpins, 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 = 0;
digitalwrite(ledgreenpins, Low);
digitalwrite(ledredpins, 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[0]] == Player &&
board[winpatterns[1]] == Player &&
board[winpatterns[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) {
if (Player == 1) {
digitalwrite(ledgreenpins[j], hıgh);
} else {
digitalwrite(ledredpins[j], hıgh);
}
}
}
delay(500);
for (int j = 0; j < 9; j++) {
if (board[j] == Player) {
if (Player == 1) {
digitalwrite(ledgreenpins[j], Low);
} else {
digitalwrite(ledredpins[j], Low);
}
}
}
delay(500);
}
}
açıklama:
- LED pinleri:
- ledgreenpins ve ledredpins dizileri ile her LED'in iki pinde tanımlanması sağlanmıştır. Yeşil LED'ler için ledgreenpins ve kırmızı LED'ler için ledredpins.
- setup fonksiyonu:
- her iki dizi için de pinmode fonksiyonları ile pinler output olarak ayarlanmıştır.
- loop fonksiyonu:
- sistem açık olduğunda ve potpin ile ayarlanan parlaklık değeri kullanılarak LED'ler kontrol edilmektedir.
- eğer board değeri 1 ise yeşil LED, 2 ise kırmızı LED yanmaktadır.
- handlekeypress fonksiyonu:
- tuş basıldığında ilgili hücre playerturn değeri ile güncellenir. Eğer oyuncu kazanmışsa blinkwinner fonksiyonu çağrılır.
- resetgame fonksiyonu:
- oyun tahtası sıfırlanır ve tüm LED'ler kapatılır.
- checkwin fonksiyonu:
- kazanma koşullarını kontrol eder.
- blinkwinner fonksiyonu:
- kazanan oyuncunun LED'leri yanıp söner.
bu kod ile LED'lerinizi kontrol edebilir ve sorununuzun çözümüne ulaşabilirsiniz. Eğer hala sorun yaşıyorsanız, devre bağlantılarınızı tekrar kontrol etmeniz ve her pinin doğru şekilde bağlandığından emin olmanız önemlidir.