@AlfianCenter

// ALFIAN CENTER
// SUBSCRIBE

#include <Servo.h> // Library untuk mengontrol motor servo

// --- Stepper Motor ---
#define STEP_PIN 2       // Pin untuk sinyal STEP ke motor stepper
#define DIR_PIN 3        // Pin untuk arah gerak motor stepper
#define ENABLE_PIN 4     // Pin untuk mengaktifkan driver motor stepper

// --- Servo Pintu ---
#define SERVO_PIN 9      // Pin yang digunakan untuk motor servo pintu
Servo pintu;             // Membuat objek servo dengan nama 'pintu'

// --- Tombol ---
#define BTN_NAIK 5       // Pin untuk tombol naik lantai
#define BTN_TURUN 6      // Pin untuk tombol turun lantai
#define BTN_BUKA 7       // Pin untuk tombol buka pintu
#define BTN_TUTUP 8      // Pin untuk tombol tutup pintu
// ALFIAN CENTER
// SUBSCRIBE
// --- Variabel Umum ---
int currentFloor = 1;           // Menyimpan posisi lantai saat ini (1 = bawah)// ALFIAN CENTER // SUBSCRIBE
const int stepsPerFloor = 2000; // Jumlah langkah motor stepper untuk berpindah 1 lantai
int delayStep = 800;            // Delay antar langkah motor stepper dalam mikrodetik

// ALFIAN CENTER
// SUBSCRIBE
void setup() {
  pinMode(STEP_PIN, OUTPUT);      // Set pin STEP sebagai output
  pinMode(DIR_PIN, OUTPUT);       // Set pin arah sebagai output
  pinMode(ENABLE_PIN, OUTPUT);    // Set pin ENABLE sebagai output
  digitalWrite(ENABLE_PIN, LOW);  // Aktifkan driver stepper (LOW = aktif untuk sebagian besar driver)

  pinMode(BTN_NAIK, INPUT_PULLUP);   // Konfigurasi tombol naik dengan pull-up
  pinMode(BTN_TURUN, INPUT_PULLUP);  // Konfigurasi tombol turun dengan pull-up
  pinMode(BTN_BUKA, INPUT_PULLUP);   // Konfigurasi tombol buka pintu dengan pull-up
  pinMode(BTN_TUTUP, INPUT_PULLUP);  // Konfigurasi tombol tutup pintu dengan pull-up

  pintu.attach(SERVO_PIN);  // Hubungkan servo ke pin yang ditentukan
  closeDoor();              // Tutup pintu saat awal program
}

// ALFIAN CENTER
// SUBSCRIBE
void loop() {
  if (digitalRead(BTN_BUKA) == LOW) { // Jika tombol buka ditekan
    openDoor();                       // Buka pintu
    delay(500);                       // Delay untuk debounce
  }

  if (digitalRead(BTN_TUTUP) == LOW) { // Jika tombol tutup ditekan
    closeDoor();                        // Tutup pintu
    delay(500);                         // Delay untuk debounce
  }

  if (digitalRead(BTN_NAIK) == LOW && currentFloor == 1) { // Jika tombol naik ditekan dan posisi di lantai 1
    moveToFloor(2);                                       // Pindah ke lantai 2
  }

  if (digitalRead(BTN_TURUN) == LOW && currentFloor == 2) { // Jika tombol turun ditekan dan posisi di lantai 2
    moveToFloor(1);                                        // Pindah ke lantai 1
  }
}

// --- Fungsi Pindah Lantai ---
void moveToFloor(int targetFloor) {
  int floorDifference = targetFloor - currentFloor;         // Hitung selisih lantai
  int stepCount = abs(floorDifference) * stepsPerFloor;     // Hitung jumlah step yang dibutuhkan

  digitalWrite(DIR_PIN, floorDifference > 0 ? HIGH : LOW);  // Tentukan arah gerakan stepper (HIGH = naik)

  closeDoor();   // Tutup pintu sebelum lift bergerak
  delay(500);    // Tunggu sebentar setelah pintu tertutup

  for (int i = 0; i < stepCount; i++) {         // Loop sebanyak step yang dibutuhkan
    digitalWrite(STEP_PIN, HIGH);               // Kirim sinyal HIGH ke stepper
    delayMicroseconds(delayStep);               // Delay mikrodetik antar sinyal
    digitalWrite(STEP_PIN, LOW);                // Kirim sinyal LOW ke stepper
    delayMicroseconds(delayStep);               // Delay mikrodetik antar sinyal
  }

  currentFloor = targetFloor;  // Perbarui posisi lantai saat ini

  openDoor();     // Buka pintu setelah sampai di lantai tujuan
  delay(5000);    // Tunggu 5 detik agar penumpang bisa keluar/masuk
  closeDoor();    // Tutup kembali pintu
}

// --- Fungsi Pintu ---
void openDoor() {
  pintu.write(90); // Gerakkan servo ke sudut 90 derajat (buka pintu)
}

void closeDoor() {
  pintu.write(0);  // Gerakkan servo ke sudut 0 derajat (tutup pintu)
}

@MatLears

Sipp... 👍

@andrewtimothy4980

mas kalau mau mengetahui / print - posisi step / current step di motor stepper pakai syntax apa ? apakah ada harus menginstal library ?

@fadlihidayat2299

program nya mana bg?

@Milyy2.0

bg kodingan nya mana bg