// Pin Definitions
#define DIR_PIN 8
#define STEP_PIN 9
#define ENABLE_PIN 10
#define POT_PIN A0
#define BUZZER_PIN 4
#define START_BUTTON_PIN 2
#define STOP_BUTTON_PIN 3
#define LIMIT_SWITCH_LEFT A1
#define LIMIT_SWITCH_RIGHT A3
#define REED_SWITCH A2
#define RED_LED 11
#define GREEN_LED 12
// Variables
int motorSpeed = 500; // Connected to potentiometer
bool isMoving = false;
void setup() {
// Pin modları
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(START_BUTTON_PIN, INPUT_PULLUP);
pinMode(STOP_BUTTON_PIN, INPUT_PULLUP);
pinMode(LIMIT_SWITCH_LEFT, INPUT_PULLUP);
pinMode(LIMIT_SWITCH_RIGHT, INPUT_PULLUP);
pinMode(REED_SWITCH, INPUT_PULLUP);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(ENABLE_PIN, HIGH); // Engine disabled
}
void loop() {
// Start button control
if (digitalRead(START_BUTTON_PIN) == LOW) {
delay(1000); // 1 second press time
motorMove(true); // Left turn
digitalWrite(RED_LED, HIGH); // The red LED lights up
waitForStopOrSwitch(LIMIT_SWITCH_LEFT); //Limit switch or stop button is expected
digitalWrite(RED_LED, LOW); // LED turns off
if (digitalRead(REED_SWITCH) == LOW) {
delay(10); // If reed switch signal is detected
motorMove(false); // Right turn
digitalWrite(GREEN_LED, HIGH); // Green LED lights up
waitForStopOrSwitch(LIMIT_SWITCH_RIGHT); // Limit switch or stop button is expected
digitalWrite(GREEN_LED, LOW); //LED turns off
}
}
}
// Motor motion function
void motorMove(bool direction) {
digitalWrite(DIR_PIN, direction);
digitalWrite(ENABLE_PIN, LOW); // Engine active
tone(BUZZER_PIN, 1000); // Long beep
while (true) {
//Steps are taken
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(motorSpeed);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(motorSpeed);
// Stop button control
if (digitalRead(STOP_BUTTON_PIN) == LOW) {
stopMotor();
return;
}
}
}
// Stop engine function
void stopMotor() {
digitalWrite(ENABLE_PIN, HIGH); // Disable engine
noTone(BUZZER_PIN); // Stop the buzzer
}
// Limit switch or stop control function
void waitForStopOrSwitch(int switchPin) {
while (digitalRead(switchPin) == HIGH) {
// Stop butonu kontrolü
if (digitalRead(STOP_BUTTON_PIN) == LOW) {
stopMotor();
return;
}
//Potentiometer reading
motorSpeed = map(analogRead(POT_PIN), 0, 1023, 200, 1000);
}
stopMotor();
}