#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Настройка дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Настройка сервоприводов
Servo servoX;
Servo servoY;
// Пины джойстиков
const int JOYSTICK1_X_PIN = A0;
const int JOYSTICK1_SW_PIN = A1;
const int JOYSTICK2_Y_PIN = A6;
const int JOYSTICK2_SW_PIN = 2;
// Светодиод и бузер
const int LED_PIN = 9;
const int BUZZER_PIN = 8;
// Запоминаем предыдущие состояния кнопок
int oldSW1 = HIGH;
int oldSW2 = HIGH;
void setup() {
Serial.begin(9600);
// Настройка кнопок джойстиков
pinMode(JOYSTICK1_SW_PIN, INPUT_PULLUP);
pinMode(JOYSTICK2_SW_PIN, INPUT_PULLUP);
// Настройка светодиода и бузера
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
// Подключение сервоприводов
servoX.attach(11);
servoY.attach(6);
// Запуск дисплея
lcd.init();
lcd.backlight();
lcd.print("Press a button");
}
void loop() {
// 1. Считываем значения джойстиков
int joystick1XValue = analogRead(JOYSTICK1_X_PIN);
int joystick2YValue = analogRead(JOYSTICK2_Y_PIN);
// Управляем сервоприводами
servoX.write(map(joystick1XValue, 0, 1023, 0, 180));
servoY.write(map(joystick2YValue, 0, 1023, 0, 180));
// 2. Считываем состояния кнопок
int joystick1SWValue = digitalRead(JOYSTICK1_SW_PIN);
int joystick2SWValue = digitalRead(JOYSTICK2_SW_PIN);
// 3. Логика первого джойстика и LED
if (joystick1SWValue == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
// 4. Логика второго джойстика и бузера
if (joystick2SWValue == LOW) {
tone(BUZZER_PIN, 1000);
} else {
noTone(BUZZER_PIN);
}
// 5. Вывод надписей на LCD
// Обновляем экран только при изменении кнопок
if (joystick1SWValue != oldSW1 ||
joystick2SWValue != oldSW2) {
lcd.clear();
if (joystick1SWValue == LOW) {
lcd.setCursor(0, 0);
lcd.print("LED");
}
if (joystick2SWValue == LOW) {
lcd.setCursor(0, 1);
lcd.print("BUZZER");
}
if (joystick1SWValue == HIGH &&
joystick2SWValue == HIGH) {
lcd.setCursor(0, 0);
lcd.print("Press a button");
}
}
oldSW1 = joystick1SWValue;
oldSW2 = joystick2SWValue;
delay(20);
}