#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <LiquidCrystal_I2C.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *motor1 = AFMS.getMotor(1);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес и размер ЖК-дисплея
int relayPin = 8; // Пин для реле лампочки
int currentSpeed = 0;
bool isLightOn = false; // Флаг состояния лампочки
const int ENA = 9;
const int IN1 = 6;
const int IN2 = 7;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Arduino Uno");
lcd.setCursor(0, 1);
lcd.print("Ready!");
AFMS.begin();
pinMode(relayPin, OUTPUT);
// Выводим список команд в терминал при старте программы
Serial.println("Available Commands:");
Serial.println("ON - Turn On Light");
Serial.println("OFF - Turn Off Light");
Serial.println("FORWARD - Move Forward");
Serial.println("BACKWARD - Move Backward");
Serial.println("SET_SPEED_FORWARD{speed} - Set Speed Forward");
Serial.println("SET_SPEED_BACKWARD{speed} - Set Speed Backward");
Serial.println("MOTOR_ON - Turn On Motor");
Serial.println("MOTOR_OFF - Turn Off Motor");
}
void loop()
{
readSerialCommand();
}
void readSerialCommand()
{
if (Serial.available() > 0)
{
String command = Serial.readStringUntil('\n');
executeCommand(command);
}
}
void executeCommand(String command)
{
Serial.print("Received Command: ");
Serial.println(command);
if (command == "ON")
{
turnOnLight();
}
else if (command == "OFF")
{
turnOffLight();
}
else if (command == "FORWARD")
{
moveForward();
}
else if (command == "BACKWARD")
{
moveBackward();
}
else if (command.startsWith("SET_SPEED_FORWARD"))
{
setSpeedForward(command);
}
else if (command.startsWith("SET_SPEED_BACKWARD"))
{
setSpeedBackward(command);
}
else if (command == "MOTOR_ON")
{
turnOnMotor();
}
else if (command == "MOTOR_OFF")
{
turnOffMotor();
}
}
void turnOnLight()
{
Serial.println("Turning On Light");
digitalWrite(relayPin, HIGH);
isLightOn = true;
lcd.clear();
lcd.print("Light Turned On");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}
void turnOffLight()
{
Serial.println("Turning Off Light");
digitalWrite(relayPin, LOW);
isLightOn = false;
lcd.clear();
lcd.print("Light Turned Off");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}
void moveForward()
{
Serial.println("Moving Forward");
Serial.print("Speed: ");
Serial.println(currentSpeed);
motor1->setSpeed(currentSpeed);
motor1->run(FORWARD);
lcd.clear();
lcd.print("Moving Forward");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}
void moveBackward()
{
Serial.println("Moving Backward");
Serial.print("Speed: ");
Serial.println(currentSpeed);
motor1->setSpeed(currentSpeed);
motor1->run(BACKWARD);
lcd.clear();
lcd.print("Moving Backward");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}
void setSpeedForward(String command)
{
int speed = command.substring(18).toInt();
currentSpeed = speed;
Serial.print("Set Speed Forward: ");
Serial.println(currentSpeed);
lcd.clear();
lcd.print("Speed Forward: ");
lcd.print(currentSpeed);
}
void setSpeedBackward(String command)
{
int speed = command.substring(19).toInt();
currentSpeed = speed;
Serial.print("Set Speed Backward: ");
Serial.println(currentSpeed);
lcd.clear();
lcd.print("Speed Backward: ");
lcd.print(currentSpeed);
}
void turnOnMotor()
{
Serial.println("Turning On Motor");
motor1->setSpeed(currentSpeed);
motor1->run(FORWARD);
lcd.clear();
lcd.print("Motor Turned On");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}
void turnOffMotor()
{
Serial.println("Turning Off Motor");
motor1->run(RELEASE);
lcd.clear();
lcd.print("Motor Turned Off");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(currentSpeed);
}