// Pin konfigurasi push button
#define BUTTON_STOP 34 // Tombol STOP (NC)
#define BUTTON_START 35 // Tombol START (NO)
#define BUTTON_TOR 32 // Tombol TOR
// Pin konfigurasi relay
#define RELAY_LAMP1 23 // Relay untuk lampu 1
#define RELAY_LAMP2 22 // Relay untuk lampu 2
#define RELAY_LAMP3 21 // Relay untuk lampu 3
#define RELAY_CONTACTOR 19 // Relay untuk kontaktor
// Status motor
bool motor_running = false;
// Variabel debounce
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50; // Debounce selama 50 ms
void setup() {
// Inisialisasi pin input
pinMode(BUTTON_STOP, INPUT_PULLUP);
pinMode(BUTTON_START, INPUT_PULLUP);
pinMode(BUTTON_TOR, INPUT_PULLUP);
// Inisialisasi pin output untuk relay
pinMode(RELAY_LAMP1, OUTPUT);
pinMode(RELAY_LAMP2, OUTPUT);
pinMode(RELAY_LAMP3, OUTPUT);
pinMode(RELAY_CONTACTOR, OUTPUT);
// Pastikan semua relay mati pada awalnya
digitalWrite(RELAY_LAMP1, LOW);
digitalWrite(RELAY_LAMP2, LOW);
digitalWrite(RELAY_LAMP3, LOW);
digitalWrite(RELAY_CONTACTOR, LOW);
Serial.begin(115200); // Untuk debugging
}
void loop() {
// Membaca tombol dengan debounce
if (debounceRead(BUTTON_STOP) == LOW && motor_running) {
motor_running = false;
stopMotor();
Serial.println("Motor dihentikan!");
}
if (debounceRead(BUTTON_START) == LOW && !motor_running) {
motor_running = true;
startMotor();
Serial.println("Motor dinyalakan!");
}
if (debounceRead(BUTTON_TOR) == LOW) {
testRelay();
Serial.println("Tombol TOR ditekan");
}
}
// Fungsi debounce untuk membaca tombol
int debounceRead(int pin) {
static int lastButtonState = HIGH;
int currentButtonState = digitalRead(pin);
if (currentButtonState != lastButtonState) {
lastDebounceTime = millis(); // Reset waktu debounce
}
if ((millis() - lastDebounceTime) > debounceDelay) {
lastButtonState = currentButtonState; // Perbarui status tombol
}
return lastButtonState;
}
void startMotor() {
// Nyalakan lampu indikator dan kontaktor
digitalWrite(RELAY_LAMP1, HIGH); // Lampu indikator jalan
digitalWrite(RELAY_LAMP2, LOW);
digitalWrite(RELAY_LAMP3, LOW);
digitalWrite(RELAY_CONTACTOR, HIGH); // Kontaktor motor aktif
}
void stopMotor() {
// Matikan lampu indikator dan kontaktor
digitalWrite(RELAY_LAMP1, LOW);
digitalWrite(RELAY_LAMP2, LOW);
digitalWrite(RELAY_LAMP3, HIGH); // Lampu indikator berhenti
digitalWrite(RELAY_CONTACTOR, LOW); // Kontaktor motor mati
}
void testRelay() {
// Mengatur kombinasi lampu untuk pengujian
digitalWrite(RELAY_LAMP1, LOW);
digitalWrite(RELAY_LAMP2, HIGH); // Lampu indikator pengujian
digitalWrite(RELAY_LAMP3, LOW);
digitalWrite(RELAY_CONTACTOR, LOW);
}