#include #include #include // LCD ekran adresi ve boyutları const int lcdAddress = 0x27; // LCD I2C adresi const int lcdCols = 16; const int lcdRows = 2; LiquidCrystal_I2C lcd(lcdAddress, lcdCols, lcdRows); // Keypad bağlantı ve tanımlamaları const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; // row pinleri byte colPins[COLS] = {13, 10, A0, A1}; // column pinleri Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Buzzer ve LED pinleri const int buzzerPin = A2; const int greenLedPin = A3; const int redLedPin = A4; // Yarışma süresi (saniye cinsinden) const int competitionTime = 60; unsigned long startTime; int score = 0; void setup() { // LCD başlatma lcd.init(); lcd.backlight(); // LCD arka ışığını aç lcd.setCursor(0, 0); lcd.print("Math Challenge!"); delay(2000); lcd.clear(); randomSeed(analogRead(0)); // rastgele sayılar için seed pinMode(buzzerPin, OUTPUT); pinMode(greenLedPin, OUTPUT); pinMode(redLedPin, OUTPUT); startTime = millis(); } void loop() { if (millis() - startTime < competitionTime * 1000) { int num1, num2, result; int operation = random(0, 3); // İşlem seçimi (0: toplama, 1: çıkarma, 2: çarpma) // İşleme göre rastgele sayılar belirleme if (operation == 2) { num1 = random(-11, 11); // Çarpma işlemi için -11 ile 11 arası rastgele sayı num2 = random(-11, 11); } else { num1 = random(-50, 50); // Diğer işlemler için -50 ile 50 arası rastgele sayı num2 = random(-50, 50); } lcd.clear(); lcd.setCursor(0, 0); lcd.print(num1); switch (operation) { case 0: // Toplama lcd.print(" + "); result = num1 + num2; break; case 1: // Çıkarma lcd.print(" - "); result = num1 - num2; break; case 2: // Çarpma lcd.print(" * "); result = num1 * num2; break; } lcd.print(num2); lcd.print(" = ?"); char key = keypad.getKey(); if (key != NO_KEY) { if (key == '#') { // Enter tuşu lcd.setCursor(0, 1); int answer; lcd.print(" "); // önceki cevabı temizle lcd.setCursor(0, 1); lcd.print("Answer: "); lcd.setCursor(8, 1); lcd.blink(); // cevap girileceği belirtmek için cursor yanıp sönüyor while ((answer = keypad.getKey()) == NO_KEY); // tuşa basılana kadar bekleniyor lcd.print(answer); lcd.noBlink(); // cursor yanıp sönme durduruluyor if (answer == result) { lcd.setCursor(0, 1); lcd.print("Success!"); digitalWrite(greenLedPin, HIGH); tone(buzzerPin, 1000, 500); score++; } else { lcd.setCursor(0, 1); lcd.print("Wrong!"); digitalWrite(redLedPin, HIGH); } delay(2000); lcd.clear(); digitalWrite(greenLedPin, LOW); digitalWrite(redLedPin, LOW); } } } else { // Yarışma süresi bittiğinde puanı ekrana yazdır lcd.clear(); lcd.setCursor(0, 0); lcd.print("Score: "); lcd.print(score); while (true) {} // Yarışma sona erdi, program burada durur } }