#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Пины джойстика
const int joystickHoriz = A0;
// Переменные
int angle = 90; // стартовое положение
const int deadZone = 50; // мёртвая зона около центра
void setup() {
myServo.attach(9);
lcd.init();
lcd.backlight();
myServo.write(angle);
lcd.setCursor(0, 0);
lcd.print("Servo Angle:");
lcd.setCursor(0, 1);
lcd.print(angle);
lcd.print((char)223); // символ градуса
}
void loop() {
int joystickValue = analogRead(joystickHoriz);
// Если сильно влево
if (joystickValue < (512 - deadZone)) {
angle--; // уменьшаем угол
if (angle < 0) angle = 0;
myServo.write(angle);
updateLCD();
delay(50); // задержка для плавности
}
// Если сильно вправо
if (joystickValue > (512 + deadZone)) {
angle++; // увеличиваем угол
if (angle > 180) angle = 180;
myServo.write(angle);
updateLCD();
delay(50); // задержка для плавности
}
}
// Функция обновления дисплея
void updateLCD() {
lcd.setCursor(0, 1);
lcd.print(" "); // стираем строку
lcd.setCursor(0, 1);
lcd.print(angle);
lcd.print((char)223); // символ градуса
}