Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Input pins
- #define BTN_START_PIN D1
- #define BTN_ACC_PIN D4
- #define BRAKE_PIN D2
- #define ENGINE_SENSOR D8
- // Output (aktif LOW = Relay ON)
- #define FUEL_PUMP_PIN D5
- #define STARTER_PIN D6
- #define BLOWER_PIN D0
- #define ACC_PIN D3
- // State tracking
- bool accOnly = false;
- bool engineRunning = false;
- bool lastStartBtn = HIGH;
- bool lastAccBtn = HIGH;
- bool lastBrake = HIGH;
- bool lastEngine = LOW;
- bool startBtnPressed = false;
- bool accBtnPressed = false;
- unsigned long startBtnTime = 0;
- unsigned long accBtnTime = 0;
- void setup() {
- Serial.begin(115200);
- pinMode(BTN_START_PIN, INPUT_PULLUP);
- pinMode(BTN_ACC_PIN, INPUT_PULLUP);
- pinMode(BRAKE_PIN, INPUT_PULLUP);
- pinMode(ENGINE_SENSOR, INPUT);
- pinMode(FUEL_PUMP_PIN, OUTPUT);
- pinMode(STARTER_PIN, OUTPUT);
- pinMode(BLOWER_PIN, OUTPUT);
- pinMode(ACC_PIN, OUTPUT);
- // Default semua relay OFF (output HIGH = relay tidak aktif)
- digitalWrite(FUEL_PUMP_PIN, HIGH);
- digitalWrite(STARTER_PIN, HIGH);
- digitalWrite(BLOWER_PIN, HIGH);
- digitalWrite(ACC_PIN, HIGH);
- }
- void loop() {
- bool currStartBtn = digitalRead(BTN_START_PIN);
- bool currAccBtn = digitalRead(BTN_ACC_PIN);
- bool currBrake = digitalRead(BRAKE_PIN);
- bool currEngine = digitalRead(ENGINE_SENSOR);
- // Tombol Start
- if (currStartBtn != lastStartBtn) {
- Serial.print("Start Button: ");
- Serial.println(currStartBtn == LOW ? "PRESSED" : "RELEASED");
- lastStartBtn = currStartBtn;
- if (currStartBtn == LOW) {
- startBtnTime = millis();
- startBtnPressed = true;
- } else {
- startBtnPressed = false;
- }
- }
- // Tombol ACC
- if (currAccBtn != lastAccBtn) {
- Serial.print("ACC Button: ");
- Serial.println(currAccBtn == LOW ? "PRESSED" : "RELEASED");
- lastAccBtn = currAccBtn;
- if (currAccBtn == LOW) {
- accBtnTime = millis();
- accBtnPressed = true;
- } else {
- accBtnPressed = false;
- }
- }
- // Rem
- if (currBrake != lastBrake) {
- Serial.print("Brake: ");
- Serial.println(currBrake == LOW ? "PRESSED" : "RELEASED");
- lastBrake = currBrake;
- }
- // Mesin (alternator)
- if (currEngine != lastEngine) {
- engineRunning = currEngine;
- Serial.print("Engine: ");
- Serial.println(engineRunning ? "ON" : "OFF");
- lastEngine = currEngine;
- }
- // Logic Tombol Start (3 detik)
- if (startBtnPressed && millis() - startBtnTime >= 3000) {
- startBtnPressed = false;
- if (!engineRunning && currBrake == LOW) {
- startEngine();
- } else if (engineRunning) {
- stopEngine();
- } else {
- Serial.println("❌ Tidak bisa START: Rem belum diinjak!");
- }
- }
- // Logic Tombol ACC Only (3 detik)
- if (accBtnPressed && millis() - accBtnTime >= 3000) {
- accBtnPressed = false;
- accOnly = !accOnly;
- Serial.print("ACC Only Mode: ");
- Serial.println(accOnly ? "ON" : "OFF");
- if (accOnly) {
- digitalWrite(ACC_PIN, LOW); // ON
- digitalWrite(BLOWER_PIN, HIGH); // Blower OFF saat ACC Only
- digitalWrite(FUEL_PUMP_PIN, HIGH);
- digitalWrite(STARTER_PIN, HIGH);
- } else {
- digitalWrite(ACC_PIN, HIGH); // OFF
- digitalWrite(BLOWER_PIN, HIGH); // OFF
- }
- }
- delay(20); // debounce ringan
- }
- // ==== Start Mesin ====
- void startEngine() {
- Serial.println("✅ Menyalakan Mesin...");
- accOnly = false;
- digitalWrite(FUEL_PUMP_PIN, LOW); // ON
- Serial.println("⛽ Fuel pump ON...");
- delay(1200); // Tunggu 1 detik
- digitalWrite(ACC_PIN, HIGH); // ACC OFF saat starter
- digitalWrite(BLOWER_PIN, HIGH); // Blower OFF saat starter
- digitalWrite(STARTER_PIN, LOW); // Starter ON
- Serial.println("🔑 Starter ON...");
- delay(1200); // Starter aktif 1 detik
- digitalWrite(STARTER_PIN, HIGH); // Starter OFF
- Serial.println("🔑 Starter OFF");
- digitalWrite(ACC_PIN, LOW); // ACC ON kembali
- digitalWrite(BLOWER_PIN, LOW); // Blower ON kembali
- }
- // ==== Matikan Mesin ====
- void stopEngine() {
- Serial.println("🛑 Mematikan Mesin...");
- digitalWrite(FUEL_PUMP_PIN, HIGH);
- digitalWrite(STARTER_PIN, HIGH);
- digitalWrite(ACC_PIN, HIGH);
- digitalWrite(BLOWER_PIN, HIGH);
- accOnly = false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement