// Pin Definitions
const int dirPin = 2;
const int stepPin = 3;
const int sensorPin = 4;
// Variables
bool lastSensorState = HIGH; // Karena menggunakan pull-up, awal HIGH
bool motorRunning = false;
void setup() {
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(sensorPin, INPUT_PULLUP); // Menggunakan internal pull-up
digitalWrite(dirPin, HIGH); // Set arah maju
Serial.begin(9600);
Serial.println("Simulasi Stepper Motor dengan Sensor NPN di Wokwi");
}
void loop() {
// Baca sensor (push button yang terhubung ke GND)
bool sensorState = digitalRead(sensorPin);
// Jika sensorState LOW (button ditekan = objek terdeteksi)
if (sensorState == LOW) {
// Jika sebelumnya motor tidak running, maka nyalakan
if (!motorRunning) {
motorRunning = true;
Serial.println("Objek terdeteksi - Motor BERGERAK");
}
// Beri step pulse
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
} else {
// Jika sensorState HIGH (tidak ada objek)
if (motorRunning) {
motorRunning = false;
Serial.println("Objek hilang - Motor BERHENTI");
}
// Motor berhenti, tidak melakukan apa-apa
}
lastSensorState = sensorState;
}