// Definisikan pin yang terhubung ke driver motor
const int stepPin1 = 23;
const int dirPin1 = 22;
const int stepPin2 = 25;
const int dirPin2 = 24;
// Konfigurasi langkah motor dan kecepatannya
const int stepsPerRevolution1 = 200; // Jumlah langkah per revolusi motor 1
const int stepsPerRevolution2 = 400; // Jumlah langkah per revolusi motor 2
const float motorSpeed1 = 400; // Kecepatan motor 1 (RPM)
const float motorSpeed2 = 1000; // Kecepatan motor 2 (RPM)
// Variabel untuk mengontrol waktu
unsigned long previousMicros = 0;
unsigned long previousMicros1 = 0;
unsigned long previousMicros2 = 0;
unsigned long stepInterval = 0; // Interval waktu antara setiap langkah motor 1 (dalam mikrodetik)
unsigned long stepInterval1 = 0; // Interval waktu antara setiap langkah motor 1 (dalam mikrodetik)
unsigned long stepInterval2 = 0; // Interval waktu antara setiap langkah motor 2 (dalam mikrodetik)
// Variabel untuk menghitung langkah
int stepCount = 0; // Jumlah langkah yang sudah dilakukan pada motor 1
int stepCount1 = 0; // Jumlah langkah yang sudah dilakukan pada motor 1
int stepCount2 = 0; // Jumlah langkah yang sudah dilakukan pada motor 2
// Variabel untuk menentukan arah langkah motor
int dir1 = 1; // Arah langkah motor 1 (1 = searah jarum jam, -1 = berlawanan arah jarum jam)
int dir2 = !1; // Arah langkah motor 2 (1 = searah jarum jam, -1 = berlawanan arah jarum jam)
void setup() {
Serial.begin(2500000);
pinMode(stepPin1, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirPin2, OUTPUT);
// Menghitung interval waktu antara setiap langkah motor berdasarkan kecepatan dalam RPM
stepInterval = 60 * 1000000 / (stepsPerRevolution1 * motorSpeed1);
stepInterval1 = 60 * 1000000 / (stepsPerRevolution1 * motorSpeed1);
stepInterval2 = 60 * 1000000 / (stepsPerRevolution2 * motorSpeed2);
}
void loop() {
unsigned long currentMicros = micros();
// Motor 1
if (currentMicros < 300000) {
if (stepCount < 225) {
if (currentMicros - previousMicros >= stepInterval) {
previousMicros = currentMicros;
digitalWrite(dirPin1, !dir1); // Atur arah langkah motor 1
digitalWrite(stepPin1, HIGH);
delayMicroseconds(5); // Ubah delay sesuai dengan karakteristik motor stepper
digitalWrite(stepPin1, LOW);
delayMicroseconds(5); // Ubah delay sesuai dengan karakteristik motor stepper
stepCount++;
}
}
} else {
unsigned long currentMicros1 = micros();
unsigned long currentMicros2 = micros();
// Motor 1
if (currentMicros1 - previousMicros1 >= stepInterval1) {
previousMicros1 = currentMicros1;
digitalWrite(dirPin1, dir1); // Atur arah langkah motor 1
// Menguji jumlah langkah motor 1
if (stepCount1 < 125) {
digitalWrite(stepPin1, HIGH);
delayMicroseconds(5); // Ubah delay sesuai dengan karakteristik motor stepper
digitalWrite(stepPin1, LOW);
delayMicroseconds(5); // Ubah delay sesuai dengan karakteristik motor stepper
stepCount1++;
}
}
// Motor 2
if (currentMicros2 - previousMicros2 >= stepInterval2) {
previousMicros2 = currentMicros2;
digitalWrite(dirPin2, dir2); // Atur arah langkah motor 2
// Menguji jumlah langkah motor 2
if (stepCount2 < stepsPerRevolution2) {
digitalWrite(stepPin2, HIGH);
delayMicroseconds(3); // Ubah delay sesuai dengan karakteristik motor stepper
digitalWrite(stepPin2, LOW);
delayMicroseconds(3); // Ubah delay sesuai dengan karakteristik motor stepper
stepCount2++;
}
}
}
}