#include <Arduino.h>
// Pin konfigurasi push button
#define BUTTON_STOP 35 // Tombol STOP (NC)
#define BUTTON_START 25 // Tombol START (NO)
#define BUTTON_TOR 14 // Tombol TOR
// Pin konfigurasi relay
#define RELAY_LAMP1 21 // Relay untuk lampu 1
#define RELAY_LAMP2 19 // Relay TOR
#define RELAY_LAMP3 18 // Relay STOP
#define RELAY_CONTACTOR 5 // Relay untuk kontaktor
// Variabel status
int count = 0; // Counter untuk status START/STop
bool motor_running = false; // Status motor menyala atau mati
bool tor_active = false; // Status tombol TOR
// Fungsi debouncing tombol
bool debounceButton(int pin) {
static uint32_t lastPressTime = 0;
uint32_t currentTime = millis();
if (digitalRead(pin) == LOW && currentTime - lastPressTime > 200) {
lastPressTime = currentTime;
return true;
}
return false;
}
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); // Indikator motor mati
digitalWrite(RELAY_CONTACTOR, LOW);
Serial.begin(115200); // Untuk debugging
}
void loop() {
// Logika tombol TOR
if (debounceButton(BUTTON_TOR)) {
tor_active = !tor_active;
if (tor_active) {
motor_running = false; // Motor otomatis mati saat TOR aktif
count = 0; // Reset counter
digitalWrite(RELAY_LAMP1, LOW); // Matikan lampu indikator START
digitalWrite(RELAY_LAMP2, HIGH); // Indikator mode TOR
digitalWrite(RELAY_LAMP3, LOW); // Matikan lampu indikator STOP
digitalWrite(RELAY_CONTACTOR, LOW); // Matikan kontaktor motor
Serial.println("Mode TOR aktif. Tombol START dan STOP dinonaktifkan.");
} else {
digitalWrite(RELAY_LAMP2, LOW); // Matikan indikator TOR
digitalWrite(RELAY_LAMP3, HIGH); // Indikator motor mati kembali menyala
Serial.println("Mode TOR nonaktif. Tombol kembali aktif.");
}
}
// Logika tombol START (hanya jika TOR tidak aktif)
if (!tor_active && debounceButton(BUTTON_START)) {
count++;
motor_running = true;
digitalWrite(RELAY_LAMP1, HIGH); // Indikator motor menyala
digitalWrite(RELAY_LAMP3, LOW); // Matikan indikator motor mati
digitalWrite(RELAY_CONTACTOR, HIGH); // Nyalakan kontaktor motor
Serial.println("Motor dinyalakan.");
}
// Logika tombol STOP (hanya jika TOR tidak aktif)
if (!tor_active && debounceButton(BUTTON_STOP)) {
count = 0;
motor_running = false;
digitalWrite(RELAY_LAMP1, LOW); // Matikan indikator motor menyala
digitalWrite(RELAY_LAMP3, HIGH); // Indikator motor mati menyala
digitalWrite(RELAY_CONTACTOR, LOW); // Matikan kontaktor motor
Serial.println("Motor dihentikan.");
}
// Debugging status
Serial.print("Motor running: ");
Serial.print(motor_running);
Serial.print(" | TOR active: ");
Serial.print(tor_active);
Serial.print(" | Counter: ");
Serial.println(count);
delay(10); // Penghindaran noise tombol
}