#include <IRremote.h>
#include <Stepper.h>
#define PIN_RECEIVER 12
IRrecv receiver(PIN_RECEIVER);
const int stepsPerRevolution = 200;
Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);
int preValue = 0; // Variabel untuk menyimpan nilai sebelumnya dari langkah motor
int value;
void setup() {
Serial.begin(115200);
receiver.enableIRIn();
stepper.setSpeed(50); // Mengatur kecepatan motor stepper
}
void loop() {
if (receiver.decode()) {
int key_value = translateIR(); // Menerjemahkan sinyal IR menjadi kode tombol
receiver.resume(); // Bersihkan buffer penerimaan IR untuk menerima sinyal baru
// Jika kode tombol yang diterima adalah 2 "+", maka tingkatkan nilai posisi motor
if (key_value == 99) {
value++; // Naikkan posisi stepper
if (value >= 180) { // Batas maksimum untuk posisi motor adalah 180 langkah
value = 180;
}
}
// Jika kode tombol yang diterima adalah 152 "-" , maka turunkan nilai posisi motor
if (key_value == 88) {
value--; // Turunkan posisi stepper
if (value <= 0) { // Batas minimum untuk posisi motor adalah 0 langkah
value = 0;
}
}
}
Serial.println("Derajat: " + String(abs(map(value, 0, 200, 0, 360))));
// Gerakkan motor stepper dengan perbedaan antara nilai sekarang dan nilai sebelumnya
stepper.step(value - preValue);
// Simpan nilai saat ini sebagai nilai sebelumnya untuk perhitungan berikutnya
preValue = value;
}
int translateIR() {
// Menerjemahkan kode IR yang diterima menjadi angka atau perintah
switch (receiver.decodedIRData.command) {
case 2: return 99;
case 152: return 88;
default: return -1;
}
}