#include <LiquidCrystal_I2C.h>
// Inisialisasi objek LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD: 0x27, 20 kolom, 4 baris
// Definisi pin-pins pada Arduino Uno
const int pushButtonRedPin = 7; // Push Button Merah terhubung ke pin 7
const int pushButtonGreenPin = 6; // Push Button Hijau terhubung ke pin 6
const int potentiometerPin = A0; // Potensiometer terhubung ke pin A0
const int ledRedPin = 5; // LED Merah terhubung ke pin 5
const int ledGreenPin = 4; // LED Hijau terhubung ke pin 4
const int stepPin = 2; // Pin STEP Driver A4988 terhubung ke pin 2
const int dirPin = 3; // Pin DIR Driver A4988 terhubung ke pin 3
// Variabel global
bool motorOn = false; // Status motor stepper (mati saat awal)
int motorSpeed = 0; // Kecepatan motor stepper
unsigned long startTime; // Waktu mulai putaran motor stepper
void setup() {
// Inisialisasi pin-pins
pinMode(pushButtonRedPin, INPUT_PULLUP);
pinMode(pushButtonGreenPin, INPUT_PULLUP);
pinMode(ledRedPin, OUTPUT);
pinMode(ledGreenPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Tampilkan pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("Mesin On");
lcd.setCursor(0, 1);
lcd.print("Kecepatan Motor");
// Matikan LED Hijau dan hidupkan LED Merah (status standby)
digitalWrite(ledGreenPin, LOW);
digitalWrite(ledRedPin, HIGH);
}
void loop() {
// Baca input dari push button merah
if (digitalRead(pushButtonRedPin) == LOW) {
motorOn = !motorOn; // Ubah status motor (hidup/mati)
if (motorOn) {
// Tampilkan pesan kecepatan motor dari potensiometer
motorSpeed = map(analogRead(potentiometerPin), 0, 1023, 0, 255);
lcd.setCursor(0, 1);
lcd.print("Kecepatan Motor ");
lcd.print(motorSpeed);
lcd.print(" RPM");
} else {
// Tampilkan pesan "Mesin On" kembali di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mesin On");
lcd.setCursor(0, 1);
lcd.print("Kecepatan Motor");
digitalWrite(ledGreenPin, LOW); // Matikan LED Hijau
digitalWrite(ledRedPin, HIGH); // Hidupkan LED Merah
}
delay(200); // Debounce tombol
}
// Baca input dari push button hijau untuk memulai motor
if (digitalRead(pushButtonGreenPin) == LOW && motorOn) {
digitalWrite(ledGreenPin, HIGH); // Hidupkan LED Hijau
digitalWrite(ledRedPin, LOW); // Matikan LED Merah
startTime = millis(); // Catat waktu mulai putaran motor
motorRotate(); // Putar motor
}
// Hentikan motor setelah 10 detik
if (motorOn && millis() - startTime >= 10000) {
digitalWrite(ledGreenPin, LOW); // Matikan LED Hijau
digitalWrite(ledRedPin, HIGH); // Hidupkan LED Merah
motorOn = false; // Ubah status motor menjadi mati
}
}
// Fungsi untuk menggerakkan motor stepper
void motorRotate() {
// Atur arah putaran motor stepper (searah jarum jam)
digitalWrite(dirPin, HIGH);
// Putar motor stepper dengan kecepatan yang telah ditentukan
for (int i = 0; i < motorSpeed; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000); // Delay untuk menentukan kecepatan putaran motor
digitalWrite(stepPin, LOW);
delayMicroseconds(1000); // Delay untuk menentukan kecepatan putaran motor
}
}