#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, D4, D7);
unsigned long startTime;
unsigned long selectedTime = 60000;
bool motorActivated = false;
int motorSpeed = 60;
void processCommand(String command) {
if (command == "m_t1") {
selectedTime = 60000;
Serial.println("Selected: 1 minute");
} else if (command == "m_t2") {
selectedTime = 120000;
Serial.println("Selected: 2 minutes");
} else if (command == "m_start") {
startMotor();
} else if (command == "m_stop") {
stopMotor();
Serial.println("Engine stopped before the set time!");
} else if (command == "m_v1") {
setMotorSpeed(60);
} else if (command == "m_v2") {
setMotorSpeed(120);
}
}
void setMotorSpeed(int speed) {
motorSpeed = speed;
myStepper.setSpeed(speed);
Serial.print("Speed set to: ");
Serial.println(speed);
}
void startMotor() {
startTime = millis();
motorActivated = true;
digitalWrite(D14, HIGH);
Serial.println("In progress...");
}
void stopMotor() {
motorActivated = false;
}
void displayRemainingTime() {
unsigned long currentTime = millis();
if (currentTime - startTime >= selectedTime) {
stopMotor();
Serial.println("Done!");
digitalWrite(D14, LOW);
digitalWrite(D13, HIGH);
digitalWrite(D5, HIGH);
delay(2000);
digitalWrite(D13, LOW);
digitalWrite(D5, LOW);
return;
}
myStepper.step(stepsPerRevolution);
delay(1);
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
processCommand(command);
}
unsigned long elapsedTime = currentTime - startTime;
unsigned long remainingTime = (selectedTime - elapsedTime) / 1000;
unsigned int minutes = remainingTime / 60;
unsigned int seconds = remainingTime % 60;
Serial.print("Tempo rimanente: ");
Serial.print(minutes);
Serial.print(" minuti ");
Serial.print(seconds);
Serial.println(" secondi");
}
void setup() {
myStepper.setSpeed(motorSpeed);
Serial.begin(9600);
Serial.println("[Simulation]");
pinMode(D13, OUTPUT);
pinMode(D14, OUTPUT);
pinMode(D15, OUTPUT);
pinMode(D5, OUTPUT);
}
void loop() {
digitalWrite(D15, HIGH);
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
processCommand(command);
}
if (motorActivated) {
displayRemainingTime();
}
}