Здравствуйте форумчане, есть задача создать пульт управления движущимся объектом. Для поворота используется сервопривод. Управление движением происходит с помощью аналогового джойстика. Плавное смещение рычага джойстика вперед-назад плавно регулирует скорость вращения двигателя, а смещение влево-вправо – поворот в соответствующую сторону сервопривода. Все режимы работы пульта «вперед», «назад», «влево», «вправо», «стоп» должны визуализироваться светодиодными индикаторами или изображениями на дисплее.
Я реализовал схему в симуляторе и написал код
Работает он некорректно заданию, помогите пожалуйста исправить ошибки
Спасибо!
#include <Servo.h>
#include <Stepper.h>
#include <LiquidCrystal.h>
// Пины для подключения джойстика
const int joyX = A0;
const int joyY = A1;
const int joyButton = 2;
// Пины для подключения шагового двигателя
const int stepPin = 9;
const int dirPin = 8;
// Пины для подключения сервопривода
const int servoPin = 10;
// Пины для подключения дисплея LCD
const int rs = 12;
const int en = 11;
const int d4 = 5;
const int d5 = 4;
const int d6 = 3;
const int d7 = 6;
// Количество шагов на оборот для шагового двигателя
const int stepsPerRevolution = 200;
// Объекты для управления шаговым двигателем, сервоприводом и дисплеем LCD
Stepper stepper(stepsPerRevolution, dirPin, stepPin);
Servo servo;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Переменные для хранения показаний джойстика
int joyValueX = 0;
int joyValueY = 0;
// Переменная для хранения состояния кнопки джойстика
int joyButtonState = 0;
void setup() {
// Настройка пинов
pinMode(joyButton, INPUT_PULLUP);
// Инициализация дисплея LCD
lcd.begin(16, 2);
// Инициализация сервопривода
servo.attach(servoPin);
// Настройка скорости шагового двигателя
stepper.setSpeed(100);
}
void loop() {
// Чтение показаний джойстика
joyValueX = analogRead(joyX);
joyValueY = analogRead(joyY);
// Чтение состояния кнопки джойстика
joyButtonState = digitalRead(joyButton);
// Расчет скорости и направления движения шагового двигателя
int speed = map(joyValueY, 0, 1023, 0, 100);
int direction = (joyValueY > 500) ? HIGH : LOW;
// Управление шаговым двигателем
stepper.setSpeed(speed);
digitalWrite(dirPin, direction);
// Управление сервоприводом
int angle = map(joyValueX, 0, 1023, 0, 180);
servo.write(angle);
// Вывод сообщений на дисплей LCD
lcd.clear();
if (joyValueY < 500)
{
lcd.print("Forward");
stepper.step(stepsPerRevolution / 4);
}
else if (joyValueY > 550)
{
lcd.print("Backward");
stepper.step(-stepsPerRevolution / 4);
}
else
{
lcd.print("Stop");
stepper.step(0);
}
lcd.setCursor(0, 1);
if (joyValueX < 500) {
lcd.print("<-");
}
else if (joyValueX > 550) {
lcd.print("->");
}
else
{
lcd.print(" ");
}
}