#define STEP_PIN 3
#define DIR_PIN 4
#define ENABLE_PIN 5
#define MS1_PIN 6
#define MS2_PIN 7
#define MS3_PIN 8
int stepDelay = 1000;
bool motorEnabled = false;
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
pinMode(MS1_PIN, OUTPUT);
pinMode(MS2_PIN, OUTPUT);
pinMode(MS3_PIN, OUTPUT);
Serial.begin(9600);
digitalWrite(ENABLE_PIN, HIGH);
}
void loop() {
if (Serial.available() > 0) {
char command = Serial.read();
switch (command) {
case 'F':
digitalWrite(DIR_PIN, HIGH);
Serial.println("Movendo para frente.");
break;
case 'B':
digitalWrite(DIR_PIN, LOW);
Serial.println("Movendo para trás.");
break;
case '1':
digitalWrite(MS1_PIN, LOW);
digitalWrite(MS2_PIN, LOW);
digitalWrite(MS3_PIN, LOW);
Serial.println("Modo de passo completo (1/1).");
break;
case '2':
digitalWrite(MS1_PIN, HIGH);
digitalWrite(MS2_PIN, LOW);
digitalWrite(MS3_PIN, LOW);
Serial.println("Modo de meio passo (1/2).");
break;
case '4':
digitalWrite(MS1_PIN, LOW);
digitalWrite(MS2_PIN, HIGH);
digitalWrite(MS3_PIN, LOW);
Serial.println("Modo de quarto passo (1/4).");
break;
case '8': // Microstep 1/8
digitalWrite(MS1_PIN, HIGH);
digitalWrite(MS2_PIN, HIGH);
digitalWrite(MS3_PIN, LOW);
Serial.println("Modo de oitavo passo (1/8).");
break;
case 'E':
digitalWrite(ENABLE_PIN, LOW);
motorEnabled = true;
Serial.println("Motor habilitado.");
break;
case 'D':
digitalWrite(ENABLE_PIN, HIGH);
motorEnabled = false;
Serial.println("Motor desabilitado.");
break;
case 'S':
if (motorEnabled) {
Serial.println("Movimento iniciado.");
} else {
Serial.println("O motor está desabilitado.");
}
break;
}
}
if (motorEnabled && Serial.available() > 0) {
char command = Serial.read();
if (command == 'S') {
moveMotor();
}
}
}
void moveMotor() {
static unsigned long lastStepTime = 0;
static bool stepState = LOW;
unsigned long currentTime = millis();
if (currentTime - lastStepTime >= (stepDelay / 1000)) {
lastStepTime = currentTime;
stepState = !stepState;
digitalWrite(STEP_PIN, stepState);
}
}