#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
#define dirPin 2
#define stepPin 3
#define enablePin 4
int numOfFloors = 3;
// Текущий этаж
int currentFloor = 1;
AccelStepper stepper(1, stepPin, dirPin);
LiquidCrystal_I2C lcd(0x27,16,2);
// Пины кнопок для перехода на этажи
const int button1Pin = 6;
const int button2Pin = 7;
const int button3Pin = 8;
void setup() {
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(button3Pin, INPUT_PULLUP);
lcd.begin(16,2); // Установите количество символов на каждой строке
lcd.backlight(); // Включите подсветку
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
stepper.setMaxSpeed(1000);
lcd.setCursor(0,0);
lcd.print("Currently at ");
lcd.print(currentFloor);
}
void loop() {
lcd.setCursor(0,0);
// put your main code here, to run repeatedly:
if (digitalRead(button1Pin) == LOW && currentFloor != 1) {
lcd.print("Going to : 1");
// ; lcd.print(1);
// Запустить двигатель, чтобы переместиться на этаж 1
stepper.moveTo(0);
while (stepper.distanceToGo() != 0) {
stepper.run();
}
// Обновить текущий этаж
currentFloor = 1;
lcd.print("Currently at ");
lcd.print(currentFloor);
}
// Если нажата кнопка 2 и лифт не находится на этаже 2
if (digitalRead(button2Pin) == LOW && currentFloor != 2) {
// lcd.print("Destination is 2");
lcd.print("Going to : 2");
// Запустить двигатель, чтобы переместиться на этаж 2
stepper.moveTo(100);
while (stepper.distanceToGo() != 0) {
stepper.run();
}
// Обновить текущий этаж
currentFloor = 2;
lcd.clear();
lcd.print("Currently at ");
lcd.print(currentFloor);
}
if (digitalRead(button3Pin) == LOW && currentFloor != 3) {
// lcd.print("Destination is 3");
lcd.print("Going to : 3");
// Запустить двигатель, чтобы переместиться на этаж 2
stepper.moveTo(200);
while (stepper.distanceToGo() != 0) {
stepper.run();
}
// Обновить текущий этаж
currentFloor = 3;
lcd.clear();
lcd.print("Currently at ");
lcd.print(currentFloor);
}
}