#include <IRremote.h> // Memanggil library IRremote
#include <Stepper.h> // Memanggil library Stepper
const int stepsPerRevolution = 200; // Langkah per revolusi stepper motor
int Receiver = 2; // Pin untuk IR Receiver
IRrecv irrecv(Receiver); // Objek untuk menerima sinyal dari IR
decode_results results; // Hasil decoding sinyal IR
// Stepper motor terhubung ke pin 8, 9, 10, dan 11
Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);
int previous = 0; // Menyimpan posisi sebelumnya
int stepperSteps = 0; // Posisi saat ini dari stepper motor
void setup() {
stepper.setSpeed(60); // Mengatur kecepatan stepper motor (rpm)
Serial.begin(9600); // Memulai komunikasi dengan Serial Monitor
irrecv.enableIRIn(); // Memulai penerimaan sinyal IR
}
void loop(){
if (irrecv.decode()) { // Jika ada sinyal IR diterima
IRremote(); // Fungsi untuk mengontrol stepper motor berdasarkan sinyal IR
irrecv.resume(); // Melanjutkan menerima sinyal IR berikutnya
// Gerakkan stepper motor berdasarkan langkah yang diperoleh dari IR remote
stepper.step(stepperSteps - previous);
previous = stepperSteps; // Update posisi sebelumnya dengan posisi sekarang
}
}
// Fungsi untuk menangani input dari IR remote
void IRremote(){
int IRinput = irrecv.decodedIRData.command; // Mendapatkan kode tombol dari IR remote
if (IRinput == 152) { // Tombol "-" pada remote
stepperSteps -= 1; // Kurangi langkah stepper 1 derajat
if (stepperSteps < 0) { // Cegah langkah negatif
stepperSteps = 0;
}
}
if (IRinput == 2) { // Tombol "+" pada remote
stepperSteps += 1; // Tambahkan langkah stepper 1 derajat
if (stepperSteps > stepsPerRevolution) { // Cegah lebih dari 1 revolusi penuh
stepperSteps = stepsPerRevolution;
}
}
// Tampilkan posisi langkah stepper saat ini ke Serial Monitor
Serial.print("Stepper position: ");
Serial.println(stepperSteps);
}