#include <AccelStepper.h>
// Definisi pin
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define BUTTON 6
#define STEP_PIN 7
#define DIR_PIN 8
#define POT_PIN A0 // Pin untuk potensiometer
// Definisi jumlah langkah per putaran (disesuaikan menjadi 200 langkah per putaran)
#define STEPS_PER_REV 200
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
// Inisialisasi pin sebagai output atau input
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP); // Tombol menggunakan internal pullup
// Pastikan semua relay dalam keadaan OFF
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, LOW);
digitalWrite(RELAY4, LOW);
// Inisialisasi stepper
stepper.setAcceleration(500);
// Nilai kecepatan maksimum awal akan di-update dari nilai potensiometer pada loop()
stepper.setMaxSpeed(1000);
}
void loop() {
// Baca nilai potensiometer (0-1023) dan mapping ke rentang kecepatan (misal: 200 - 1000)
int potValue = analogRead(POT_PIN);
int maxSpeed = map(potValue, 0, 1023, 200, 1000);
stepper.setMaxSpeed(maxSpeed);
// Cek jika tombol ditekan (nilai LOW karena menggunakan INPUT_PULLUP)
if (digitalRead(BUTTON) == LOW) {
// Pastikan semua relay OFF sebelum memulai
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, LOW);
digitalWrite(RELAY4, LOW);
// Relay 1 ON selama 2 detik, kemudian OFF
digitalWrite(RELAY1, HIGH);
delay(2000);
digitalWrite(RELAY1, LOW);
// Relay 2 ON selama 10 detik
digitalWrite(RELAY2, HIGH);
delay(1000);
// Aktifkan Relay 3 saat stepper akan bergerak
digitalWrite(RELAY3, HIGH);
// Perintah stepper untuk berputar 2 kali putaran penuh
stepper.move(STEPS_PER_REV * 2);
while (stepper.distanceToGo() != 0) {
stepper.run();
}
// Setelah stepper selesai, matikan Relay 3 dan Relay 2
digitalWrite(RELAY3, LOW);
digitalWrite(RELAY2, LOW);
// Relay 4 ON selama 2 detik, kemudian OFF
digitalWrite(RELAY4, HIGH);
delay(2000);
digitalWrite(RELAY4, LOW);
// Delay singkat untuk menghindari pembacaan tombol yang tidak disengaja
delay(500);
}
}