#include <NewPing.h>

// Inisialisasi pin untuk sensor ultrasonik
const int trigPin = 9;
const int echoPin = 10;

// Inisialisasi pin untuk motor stepper
const int stepPin = 2;
const int dirPin = 3;

// Inisialisasi objek sensor ultrasonik
NewPing sonar(trigPin, echoPin);

// Inisialisasi variabel untuk motor stepper
int stepsPerRevolution = 200;
int stepNumber = 0;

void setup() {
  // Inisialisasi Serial Monitor
  Serial.begin(9600);

  // Set pin mode untuk sensor ultrasonik
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  // Set pin mode untuk motor stepper
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void moveStepper(int steps, int direction) {
  digitalWrite(dirPin, direction);  // 1 untuk searah jarum jam, 0 untuk berlawanan arah jarum jam
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500); // Sesuaikan dengan kecepatan motor
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500); // Sesuaikan dengan kecepatan motor
  }
}

void loop() {
  // Mengukur jarak dengan sensor ultrasonik
  int distance = sonar.ping_cm();

  // Menampilkan jarak pada Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);

  // Menggerakkan motor stepper berdasarkan jarak
  if (distance < 10) {
    // Jika jarak kurang dari 10cm, motor bergerak lawan arah jarum jam 90 derajat
    moveStepper(stepsPerRevolution / 4, 0); // 0 untuk berlawanan arah jarum jam
  } else {
    // Jika jarak di atas 10cm, motor bergerak 180 derajat searah jarum jam
    moveStepper(stepsPerRevolution / 2, 1); // 1 untuk searah jarum jam
  }

  // Delay untuk stabilitas dan menyesuaikan kecepatan
  delay(1000);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
A4988
drv1:ENABLE
drv1:MS1
drv1:MS2
drv1:MS3
drv1:RESET
drv1:SLEEP
drv1:STEP
drv1:DIR
drv1:GND.1
drv1:VDD
drv1:1B
drv1:1A
drv1:2A
drv1:2B
drv1:GND.2
drv1:VMOT
vcc1:VCC
gnd1:GND
stepper1:A-
stepper1:A+
stepper1:B+
stepper1:B-