#include <Stepper.h>
// Define the number of steps per revolution for your motor
const int stepsPerRevolution = 200; // Adjust this according to your motor's specification
// Initialize the stepper library on pins D8, D9, D10, and D11
Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);
// Pin definitions for sensors and LEDs
const int sensor1Pin = 2; // Motion sensor before the barrier (approaching train)
const int sensor2Pin = 3; // Motion sensor after the barrier (train passed)
const int redLEDPin = 4; // Red LED pin
const int greenLEDPin = 5; // Green LED pin
bool barrierDown = false;
void setup() {
// Initialize input/output pins
pinMode(sensor1Pin, INPUT);
pinMode(sensor2Pin, INPUT);
pinMode(redLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
// Start with green LED on (barrier up)
digitalWrite(greenLEDPin, HIGH);
digitalWrite(redLEDPin, LOW);
}
void loop() {
bool trainApproaching = digitalRead(sensor1Pin); // Read motion sensor 1
bool trainPassed = digitalRead(sensor2Pin); // Read motion sensor 2
if (trainApproaching && !barrierDown) {
// Train detected by sensor 1, lower the barrier
lowerBarrier();
barrierDown = true;
// Turn on red LED (train approaching)
digitalWrite(redLEDPin, HIGH);
digitalWrite(greenLEDPin, LOW);
}
if (trainPassed && barrierDown) {
// Train passed detected by sensor 2, raise the barrier
raiseBarrier();
barrierDown = false;
// Turn on green LED (train passed)
digitalWrite(greenLEDPin, HIGH);
digitalWrite(redLEDPin, LOW);
}
}
void lowerBarrier() {
stepper.setSpeed(60); // Adjust the speed (RPM) for lowering the barrier
stepper.step(stepsPerRevolution); // Move the motor forward to lower the barrier
}
void raiseBarrier() {
stepper.setSpeed(60); // Adjust the speed (RPM) for raising the barrier
stepper.step(-stepsPerRevolution); // Move the motor backward to raise the barrier
}