#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
#define GLED 13 // Пин для синего светодиода
#define YLED 12 // Пин для зеленого светодиода
#define RLED 11 // Пин для красного светодиода
const int dirPin = 2;
const int stepPin = 3;
unsigned long time;
int currentSpeed = 0;
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(GLED, OUTPUT);
pinMode(YLED, OUTPUT);
pinMode(RLED, OUTPUT);
Serial.begin(9600);
stepper.setMaxSpeed(1000.0);
stepper.setAcceleration(0.0);
}
void loop() {
green();
yellowAfterGreen();
red();
yellowAfterRed();
}
void green() {
digitalWrite(GLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GO!");
// stepper.setAcceleration(100.0);
time = millis();
while (millis() - time < 5000) {
currentSpeed = currentSpeed + 1;
stepper.setSpeed(currentSpeed);
stepper.runSpeed();
delay(10);
}
}
void yellowAfterGreen() {
digitalWrite(YLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WAIT");
time = millis();
while (millis() - time < 2000) {
if (currentSpeed > 0) {
currentSpeed = currentSpeed - 2.5;
stepper.setSpeed(currentSpeed);
stepper.runSpeed();
delay(10);
}
}
}
void red() {
digitalWrite(GLED, LOW);
digitalWrite(YLED, LOW);
digitalWrite(RLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("STOP");
currentSpeed = 0;
stepper.stop();
delay(5000); // Пауза 5 секунд
}
void yellowAfterRed() {
digitalWrite(YLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WAIT");
time = millis();
while (millis() - time < 2000) {
currentSpeed = currentSpeed + 1;
delay(10);
}
// Выключаем светодиоды и повторяем цикл
digitalWrite(YLED, LOW);
digitalWrite(RLED, LOW);
}