#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;
}
}
}