#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int score = 0;
int questionNumber = 1;
char correctAnswer;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(A0));
// تهيئة شاشة OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Error: OLED not connected!");
while(1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Guess Arduino Output!");
display.println("Answer in Serial");
display.display();
Serial.println("Guess the correct output!");
Serial.println("-----------------------");
generateQuestion();
}
void loop() {
if (Serial.available() > 0) {
char userAnswer = Serial.read();
if (userAnswer == correctAnswer) {
Serial.println("✅ Correct!");
score++;
} else {
Serial.println("❌ Wrong!");
Serial.print("Correct answer: ");
Serial.println(correctAnswer);
}
delay(1000);
questionNumber++;
Serial.print("Score: ");
Serial.println(score);
Serial.println("-----------------------");
generateQuestion();
}
}
void generateQuestion() {
int questionType = random(1, 4);
display.clearDisplay();
display.setCursor(0, 0);
switch (questionType) {
case 1:
correctAnswer = random(1, 3) == 1 ? '1' : '2';
display.println("Q1: digitalWrite(13,HIGH)?");
display.println("1) Turn ON LED");
display.println("2) Turn OFF LED");
display.println("3) Read pin");
break;
case 2:
correctAnswer = '2';
display.println("Q2: analogRead(A0)=?");
display.println("(2.5V input)");
display.println("1) 0");
display.println("2) 512");
display.println("3) 1023");
break;
case 3:
correctAnswer = '3';
display.println("Q3: pinMode(13,OUTPUT)?");
display.println("1) Read pin 13");
display.println("2) Auto 5V output");
display.println("3) Set pin 13 to output");
break;
}
display.display();
Serial.println("\nEnter answer (1, 2, or 3):");
}