#define STEP_PIN 2
#define DIR_PIN 5
#define ENABLE_PIN 8
#define RELAY1_PIN 10
#define RELAY2_PIN 11
#define BUTTON_FORWARD 12
#define BUTTON_BACKWARD 13
#define BUTTON_RIGHT 14
#define BUTTON_LEFT 15
void setup() {
Serial.begin(9600);
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(BUTTON_FORWARD, INPUT_PULLUP);
pinMode(BUTTON_BACKWARD, INPUT_PULLUP);
pinMode(BUTTON_RIGHT, INPUT_PULLUP);
pinMode(BUTTON_LEFT, INPUT_PULLUP);
digitalWrite(ENABLE_PIN, LOW); // Enable the motor driver
// Initialize relays to off
digitalWrite(RELAY1_PIN, HIGH); // assuming active low relay
digitalWrite(RELAY2_PIN, HIGH); // assuming active low relay
}
void loop() {
// Check button states
if (digitalRead(BUTTON_FORWARD) == LOW) {
moveForward();
} else if (digitalRead(BUTTON_BACKWARD) == LOW) {
moveBackward();
} else if (digitalRead(BUTTON_RIGHT) == LOW) {
turnRight();
} else if (digitalRead(BUTTON_LEFT) == LOW) {
turnLeft();
} else {
stopMotors();
}
delay(100);
}
void moveForward() {
digitalWrite(RELAY1_PIN, LOW); // Turn on relay 1 to power motor 1
digitalWrite(RELAY2_PIN, LOW); // Turn on relay 2 to power motor 2
digitalWrite(DIR_PIN, HIGH);
for (int x = 0; x < 200; x++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(10);
Serial.print(RELAY1_PIN);
}
digitalWrite(RELAY1_PIN, HIGH); // Turn off relay 1 to stop motor 1
digitalWrite(RELAY2_PIN, HIGH); // Turn off relay 2 to stop motor 2
}
void moveBackward() {
digitalWrite(RELAY1_PIN, LOW); // Turn on relay 1 to power motor 1
digitalWrite(RELAY2_PIN, LOW); // Turn on relay 2 to power motor 2
digitalWrite(DIR_PIN, LOW);
for (int x = 0; x < 200; x++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(10);
}
digitalWrite(RELAY1_PIN, HIGH); // Turn off relay 1 to stop motor 1
digitalWrite(RELAY2_PIN, HIGH); // Turn off relay 2 to stop motor 2
}
void turnRight() {
digitalWrite(RELAY1_PIN, LOW); // Turn on relay 1 to power motor 1
digitalWrite(RELAY2_PIN, HIGH); // Turn off relay 2 to stop motor 2
digitalWrite(DIR_PIN, HIGH);
for (int x = 0; x < 100; x++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(10);
Serial.print(RELAY1_PIN);
Serial.print(RELAY2_PIN);
}
digitalWrite(RELAY1_PIN, HIGH); // Turn off relay 1 to stop motor 1
}
void turnLeft() {
digitalWrite(RELAY1_PIN, HIGH); // Turn off relay 1 to stop motor 1
digitalWrite(RELAY2_PIN, LOW); // Turn on relay 2 to power motor 2
digitalWrite(DIR_PIN, HIGH);
for (int x = 0; x < 100; x++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(10);
}
digitalWrite(RELAY2_PIN, HIGH); // Turn off relay 2 to stop motor 2
}
void stopMotors() {
digitalWrite(RELAY1_PIN, HIGH); // Turn off relay 1 to stop motor 1
digitalWrite(RELAY2_PIN, HIGH); // Turn off relay 2 to stop motor 2
}