Загрузка данных


#define _LCD_TYPE 1  // Для работы с I2C дисплеями
#include <LCD_1602_RUS_ALL.h>
LCD_1602_RUS lcd(0x27, 16, 2);

const int buzzerPin = 8;

// --- Переменные для таймера звука ---
unsigned long previousSoundMillis = 0;
const long soundInterval = 60000; // 60 секунд в миллисекундах

// --- Функции для зуммера (R2-D2) ---
void shortBeep() {
  digitalWrite(buzzerPin, HIGH);
  delay(50);
  digitalWrite(buzzerPin, LOW);
}

void longBeep() {
  digitalWrite(buzzerPin, HIGH);
  delay(200);
  digitalWrite(buzzerPin, LOW);
}

void wordPause() { delay(150); }
void accentPause() { delay(300); }
void sentencePause() { delay(600); }

void r2_party_greeting() {
  // --- Часть 1: представление ---
  shortBeep(); wordPause();
  longBeep(); accentPause();

  shortBeep(); shortBeep(); wordPause();
  longBeep(); wordPause();

  shortBeep(); shortBeep(); wordPause();
  longBeep(); accentPause();

  // --- Часть 2: приветствие ---
  shortBeep(); shortBeep(); wordPause();
  longBeep(); wordPause();

  shortBeep(); shortBeep(); shortBeep(); wordPause();

  longBeep(); wordPause();
  shortBeep(); shortBeep();
  accentPause();

  // --- Часть 3: финал «Ура!» ---
  for (int i = 0; i < 4; i++) {
    shortBeep();
    delay(80 - i * 15);
  }
  longBeep();
  sentencePause();
}

// --- Переменные для анимации дисплея ---
unsigned long previousDisplayMillis = 0;
const long displayInterval = 5000; // 5 секунд на каждую надпись
int displayState = 0; // 0 - первая надпись, 1 - вторая

void setup() {
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(buzzerPin, LOW);

  lcd.init();
  lcd.backlight();
  
  previousSoundMillis = millis();
  previousDisplayMillis = millis();
}

void loop() {
  // --- ЛОГИКА ЗВУКА (Раз в минуту) ---
  unsigned long currentMillis = millis();
  if (currentMillis - previousSoundMillis >= soundInterval) {
    r2_party_greeting();      // Произносим фразу R2-D2
    previousSoundMillis = currentMillis; // Сбрасываем таймер
  }

  // --- ЛОГИКА ДИСПЛЕЯ (Каждые 5 секунд) ---
  if (currentMillis - previousDisplayMillis >= displayInterval) {
    previousDisplayMillis = currentMillis;
    
    lcd.clear();
    if (displayState == 0) {
      lcd.setCursor(0, 0);
      lcd.print("ПРИВЕТ Я");
      lcd.setCursor(0, 1);
      lcd.print("ОВОЩНОЙ РОБОТ");
      displayState = 1;
    } else {
      lcd.setCursor(0, 0);
      lcd.print("РАЗРАБОТКА");
      lcd.setCursor(0, 1);
      lcd.print("ОТИС ФКУ ЦИТОВ");
      displayState = 0;
    }
  }
}