Advertisement
r3yr3

Start Stop Engine 4 Relay

May 19th, 2025
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 4.22 KB | Software | 0 0
  1. // Input pins
  2. #define BTN_START_PIN   D1
  3. #define BTN_ACC_PIN     D4
  4. #define BRAKE_PIN       D2
  5. #define ENGINE_SENSOR   D8
  6.  
  7. // Output (aktif LOW = Relay ON)
  8. #define FUEL_PUMP_PIN   D5
  9. #define STARTER_PIN     D6
  10. #define BLOWER_PIN      D0
  11. #define ACC_PIN         D3
  12.  
  13. // State tracking
  14. bool accOnly = false;
  15. bool engineRunning = false;
  16.  
  17. bool lastStartBtn = HIGH;
  18. bool lastAccBtn = HIGH;
  19. bool lastBrake = HIGH;
  20. bool lastEngine = LOW;
  21.  
  22. bool startBtnPressed = false;
  23. bool accBtnPressed = false;
  24. unsigned long startBtnTime = 0;
  25. unsigned long accBtnTime = 0;
  26.  
  27. void setup() {
  28.   Serial.begin(115200);
  29.  
  30.   pinMode(BTN_START_PIN, INPUT_PULLUP);
  31.   pinMode(BTN_ACC_PIN, INPUT_PULLUP);
  32.   pinMode(BRAKE_PIN, INPUT_PULLUP);
  33.   pinMode(ENGINE_SENSOR, INPUT);
  34.  
  35.   pinMode(FUEL_PUMP_PIN, OUTPUT);
  36.   pinMode(STARTER_PIN, OUTPUT);
  37.   pinMode(BLOWER_PIN, OUTPUT);
  38.   pinMode(ACC_PIN, OUTPUT);
  39.  
  40.   // Default semua relay OFF (output HIGH = relay tidak aktif)
  41.   digitalWrite(FUEL_PUMP_PIN, HIGH);
  42.   digitalWrite(STARTER_PIN, HIGH);
  43.   digitalWrite(BLOWER_PIN, HIGH);
  44.   digitalWrite(ACC_PIN, HIGH);
  45. }
  46.  
  47. void loop() {
  48.   bool currStartBtn = digitalRead(BTN_START_PIN);
  49.   bool currAccBtn   = digitalRead(BTN_ACC_PIN);
  50.   bool currBrake    = digitalRead(BRAKE_PIN);
  51.   bool currEngine   = digitalRead(ENGINE_SENSOR);
  52.  
  53.   // Tombol Start
  54.   if (currStartBtn != lastStartBtn) {
  55.     Serial.print("Start Button: ");
  56.     Serial.println(currStartBtn == LOW ? "PRESSED" : "RELEASED");
  57.     lastStartBtn = currStartBtn;
  58.     if (currStartBtn == LOW) {
  59.       startBtnTime = millis();
  60.       startBtnPressed = true;
  61.     } else {
  62.       startBtnPressed = false;
  63.     }
  64.   }
  65.  
  66.   // Tombol ACC
  67.   if (currAccBtn != lastAccBtn) {
  68.     Serial.print("ACC Button: ");
  69.     Serial.println(currAccBtn == LOW ? "PRESSED" : "RELEASED");
  70.     lastAccBtn = currAccBtn;
  71.     if (currAccBtn == LOW) {
  72.       accBtnTime = millis();
  73.       accBtnPressed = true;
  74.     } else {
  75.       accBtnPressed = false;
  76.     }
  77.   }
  78.  
  79.   // Rem
  80.   if (currBrake != lastBrake) {
  81.     Serial.print("Brake: ");
  82.     Serial.println(currBrake == LOW ? "PRESSED" : "RELEASED");
  83.     lastBrake = currBrake;
  84.   }
  85.  
  86.   // Mesin (alternator)
  87.   if (currEngine != lastEngine) {
  88.     engineRunning = currEngine;
  89.     Serial.print("Engine: ");
  90.     Serial.println(engineRunning ? "ON" : "OFF");
  91.     lastEngine = currEngine;
  92.   }
  93.  
  94.   // Logic Tombol Start (3 detik)
  95.   if (startBtnPressed && millis() - startBtnTime >= 3000) {
  96.     startBtnPressed = false;
  97.     if (!engineRunning && currBrake == LOW) {
  98.       startEngine();
  99.     } else if (engineRunning) {
  100.       stopEngine();
  101.     } else {
  102.       Serial.println("❌ Tidak bisa START: Rem belum diinjak!");
  103.     }
  104.   }
  105.  
  106.   // Logic Tombol ACC Only (3 detik)
  107.   if (accBtnPressed && millis() - accBtnTime >= 3000) {
  108.     accBtnPressed = false;
  109.     accOnly = !accOnly;
  110.     Serial.print("ACC Only Mode: ");
  111.     Serial.println(accOnly ? "ON" : "OFF");
  112.  
  113.     if (accOnly) {
  114.       digitalWrite(ACC_PIN, LOW);     // ON
  115.       digitalWrite(BLOWER_PIN, HIGH); // Blower OFF saat ACC Only
  116.       digitalWrite(FUEL_PUMP_PIN, HIGH);
  117.       digitalWrite(STARTER_PIN, HIGH);
  118.     } else {
  119.       digitalWrite(ACC_PIN, HIGH);    // OFF
  120.       digitalWrite(BLOWER_PIN, HIGH); // OFF
  121.     }
  122.   }
  123.  
  124.   delay(20); // debounce ringan
  125. }
  126.  
  127. // ==== Start Mesin ====
  128. void startEngine() {
  129.   Serial.println("✅ Menyalakan Mesin...");
  130.  
  131.   accOnly = false;
  132.  
  133.   digitalWrite(FUEL_PUMP_PIN, LOW);  // ON
  134.   Serial.println("⛽ Fuel pump ON...");
  135.   delay(1200);  // Tunggu 1 detik
  136.  
  137.   digitalWrite(ACC_PIN, HIGH);       // ACC OFF saat starter
  138.   digitalWrite(BLOWER_PIN, HIGH);    // Blower OFF saat starter
  139.  
  140.   digitalWrite(STARTER_PIN, LOW);    // Starter ON
  141.   Serial.println("🔑 Starter ON...");
  142.   delay(1200);  // Starter aktif 1 detik
  143.   digitalWrite(STARTER_PIN, HIGH);   // Starter OFF
  144.   Serial.println("🔑 Starter OFF");
  145.  
  146.   digitalWrite(ACC_PIN, LOW);        // ACC ON kembali
  147.   digitalWrite(BLOWER_PIN, LOW);     // Blower ON kembali
  148. }
  149.  
  150. // ==== Matikan Mesin ====
  151. void stopEngine() {
  152.   Serial.println("🛑 Mematikan Mesin...");
  153.   digitalWrite(FUEL_PUMP_PIN, HIGH);
  154.   digitalWrite(STARTER_PIN, HIGH);
  155.   digitalWrite(ACC_PIN, HIGH);
  156.   digitalWrite(BLOWER_PIN, HIGH);
  157.   accOnly = false;
  158. }
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement