ЁЯО▓ рд░реЗрдЯреНрд░реЛ рдЧреЗрдо: рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ (рд╕реНрддрд░реЛрдВ, рд╕реНрдХреЛрд░ рдФрд░ рдХрд╕реНрдЯрдо рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде)


ЁЯФз рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ

  • Arduino рдмреЛрд░реНрдб (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдКрдиреЛ, R4)
  • I2C рдПрд▓рд╕реАрдбреА 1602 рдбрд┐рд╕реНрдкреНрд▓реЗ (I2C рдкрддрд╛ рдЖрдорддреМрд░ рдкрд░ 0x27)
  • рдкреБрд╢ рдмрдЯрди (рдЧреЗрдо рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ/рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП)
  • рдЬрдореНрдкрд░ рддрд╛рд░ рдФрд░ рдмреНрд░реЗрдбрдмреЛрд░реНрдб
  • рдХрдВрдкреНрдпреВрдЯрд░ (рд╕реАрд░рд┐рдпрд▓ рдореЙрдирд┐рдЯрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП)

ЁЯУМ рд╡рд╛рдпрд░рд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди

1. I2C рдПрд▓рд╕реАрдбреА 1602 рдбрд┐рд╕реНрдкреНрд▓реЗ

  • VCC: тЖТ рдЖрд░реНрдбреБрдЗрдиреЛ 5V
  • GND: тЖТ рдЖрд░реНрдбреБрдЗрдиреЛ GND
  • рдПрд╕рдбреАрдП: тЖТ рдЖрд░реНрдбреБрдЗрдиреЛ A4 (рдпреВрдиреЛ) рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдПрд╕рдбреАрдП pin
  • рдПрд╕рд╕реАрдПрд▓: тЖТ рдЖрд░реНрдбреБрдЗрдиреЛ A5 (рдпреВрдиреЛ) рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдПрд╕рд╕реАрдПрд▓ pin

2. рд░реАрд╕реЗрдЯ/рдПрдбрд╡рд╛рдВрд╕ рдмрдЯрди

  • рдПрдХ рдЯрд░реНрдорд┐рдирд▓: тЖТ рдЖрд░реНрдбреБрдЗрдиреЛ рдбрд┐рдЬрд┐рдЯрд▓ Pin 4
  • рдЕрдиреНрдп рдЯрд░реНрдорд┐рдирд▓: тЖТ GND
  • рдиреЛрдЯ: рдЖрдВрддрд░рд┐рдХ рдкреБрд▓-рдЕрдк рдкреНрд░рддрд┐рд░реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ pin рдХреЗ рд▓рд┐рдП рдореЛрдб рдЗрдирдкреБрдЯ_рдкреБрд▓рдЕрдк рдХреЛрдб рдореЗрдВ

ЁЯТ╗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

рдиреАрдЪреЗ рдкреВрд░рд╛ рд╕реНрдХреЗрдЪ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЧреЗрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдореЗрдВ:

  • RSI рдЧреБрдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ (рд╕реНрддрд░ 1: 1-100, рд╕реНрддрд░ 2: 1-200, рдЖрджрд┐)ред
  • рд╕реНрдХреЛрд░ рдХреАping рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ.
  • A рдХрд╕реНрдЯрдо рд╕реНрдорд╛рдЗрд▓реА рдЪреЗрд╣рд░рд╛ (рдПрдХ рдХрд╕реНрдЯрдо рдПрд▓рд╕реАрдбреА рдХреИрд░реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЬреАрддрдиреЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  • рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдиреЗ рд╕реЗ рдЧреЗрдо рддреБрд░рдВрдд рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
#include <LiquidCrystal_I2C.h>

// ----- LCD Settings -----
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns x 2 rows

// ----- Game Variables -----
int secretNumber;
bool gameOver = false;
int guessCount = 0;
int level = 1; // Starting level

// ----- Reset/Advance Button Pin -----
const int resetButtonPin = 4;

// ----- Custom Character: Smiley Face -----
byte smiley[8] = {
  B00000,
  B01010,
  B01010,
  B00000,
  B10001,
  B01110,
  B00000,
  B00000
};

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  
  // Set up reset button with internal pull-up resistor
  pinMode(resetButtonPin, INPUT_PULLUP);
  
  // Create custom smiley face character at slot 0
  lcd.createChar(0, smiley);
  
  // Seed the random generator using an unconnected analog pin
  randomSeed(analogRead(0));
  
  // Start the first game
  startNewGame();
}

void loop() {
  // ----- Check Reset/Advance Button -----
  if (digitalRead(resetButtonPin) == LOW) {
    // Wait until the button is released to avoid multiple triggers
    while (digitalRead(resetButtonPin) == LOW) { delay(10); }
    startNewGame();
    delay(500); // Debounce delay
  }
  
  // ----- Process Serial Input for Guesses -----
  if (Serial.available() > 0 && !gameOver) {
    int guess = Serial.parseInt();
    if (guess == 0) return; // Skip invalid input
    
    guessCount++; // Increase guess count
    
    lcd.clear();
    
    if (guess < secretNumber) {
      lcd.setCursor(0, 0);
      lcd.print("Too Low!");
      Serial.println("Too low! Try again:");
    } 
    else if (guess > secretNumber) {
      lcd.setCursor(0, 0);
      lcd.print("Too High!");
      Serial.println("Too high! Try again:");
    } 
    else {
      // Correct guess!
      lcd.setCursor(0, 0);
      lcd.print("Correct!");
      lcd.setCursor(0, 1);
      lcd.print("Guesses: ");
      lcd.print(guessCount);
      lcd.write(byte(0)); // Display custom smiley
      Serial.println("Correct! You win!");
      gameOver = true;
      
      // Increase level for the next game
      level++;
      
      // Wait a moment before starting a new game
      delay(3000);
      startNewGame();
    }
    
    delay(1500); // Short delay for user to see feedback
    
    // If the game isn't over, re-prompt on the LCD
    if (!gameOver) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Level ");
      lcd.print(level);
      lcd.print(" Guess?");
      Serial.println("Enter your next guess:");
    }
  }
}

void startNewGame() {
  gameOver = false;
  guessCount = 0;
  // Generate a new secret number between 1 and (level * 100)
  secretNumber = random(1, level * 100 + 1);
  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Level ");
  lcd.print(level);
  lcd.setCursor(0, 1);
  lcd.print("1-");
  lcd.print(level * 100);
  
  Serial.print("New game started! Level ");
  Serial.print(level);
  Serial.print(": Guess a number between 1 and ");
  Serial.println(level * 100);
}

ЁЯУЛ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

  • рдЦреЗрд▓ рдЖрд░рдВрднреАрдХрд░рдг:
    RSI startNewGame() рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдо рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рдЧреБрдкреНрдд рдирдВрдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрдорд╛рди рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрд▓рд╕реАрдбреА рдкрд░ рд╕реНрддрд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рд╕реНрдХреЛрд░ рдХреАping:
    рд╣рд░ рд╡реИрдз рдЕрдиреБрдорд╛рди рд╕реЗ рдореВрд▓реНрдп рдмрдврд╝рддрд╛ рд╣реИ guessCountрдЬрдм рдЖрдк рд╕рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реНрдорд╛рдЗрд▓реА рдЪреЗрд╣рд░реЗ рдХреЗ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдПрд▓рд╕реАрдбреА рдкрд░ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИред
  • рдПрдХрд╛рдзрд┐рдХ рд╕реНрддрд░:
    рд╕рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдкрд░, рдЦреЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдЧреБрдкреНрдд рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрддрд░ 1: 1-100, рд╕реНрддрд░ 2: 1-200, рдЖрджрд┐)ред
  • рд░реАрд╕реЗрдЯ рдмрдЯрди:
    рдкреБрд╢ рдмрдЯрди (рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ) рджрдмрд╛рдиреЗ рдкрд░ pin 4) рддреБрд░рдВрдд рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдЧреЗрдо рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░ рд╕рдХреЗрдВрдЧреЗред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд╡реЗрд╢:
    рд╕реАрд░рд┐рдпрд▓ рдореЙрдирд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлреАрдбрдмреИрдХ ("рдмрд╣реБрдд рдХрдо!" рдпрд╛ "рдмрд╣реБрдд рдЕрдзрд┐рдХ!") рдПрд▓рд╕реАрдбреА рдФрд░ рд╕реАрд░рд┐рдпрд▓ рдореЙрдирд┐рдЯрд░ рджреЛрдиреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХрд╕реНрдЯрдо рд╡рд░реНрдг:
    рдЬрдм рдЖрдк рдЬреАрддрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдорд╛рдЗрд▓реА рдлреЗрд╕ рдХреИрд░реЗрдХреНрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

ЁЯОп рд╕рдорд╛рдкрди

рдЗрд╕ рдЙрдиреНрдирдд рд░реЗрдЯреНрд░реЛ рдЧреЗрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рд░реАрд╕реЗрдЯ рдмрдЯрди: рдХрд┐рд╕реА рднреА рд╕рдордп рдЦреЗрд▓ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ.
  • рд╕реНрдХреЛрд░ рдХреАping: рдЗрд╕ рдмрд╛рдд рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рддрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдП рд╣реИрдВред
  • рдПрдХрд╛рдзрд┐рдХ рд╕реНрддрд░: рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдк рдЬреАрддрддреЗ рдЬрд╛рдПрдВ, рдХрдард┐рдирд╛рдИ рдмрдврд╝рддреА рдЬрд╛рдПред
  • рдХрд╕реНрдЯрдо рдЪрд┐рд╣реНрди: рдЬрдм рдЖрдк рдЬреАрддреЗрдВ рддреЛ рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рд╕реНрдорд╛рдЗрд▓реА рдЪреЗрд╣рд░реЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдзрд┐рдХ рдЧреЗрдо рд╕реНрддрд░ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ред рдЕрдкрдиреЗ рд░реЗрдЯреНрд░реЛ рдЧреЗрдо рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ! ЁЯШКЁЯСН

ЁЯУб рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдВ - рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдврд╝рд╛рдПрдБред

рдПрдХ рдЬрд╡рд╛рдм рд▓рд┐рдЦреЗрдВ