const int relay1 = 6; // Relay untuk kecepatan rendah
const int relay2 = 7; // Relay untuk kecepatan sedang
const int relay3 = 8; // Relay untuk kecepatan tinggi
const int buttonUp = 2;    // Tombol untuk meningkatkan kecepatan
const int buttonDown = 3;  // Tombol untuk menurunkan kecepatan
// Variabel untuk menyimpan status kecepatan
int speedState = 0; // 0 = Mati, 1 = Rendah, 2 = Sedang, 3 = Tinggi
void setup() {
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(buttonUp, INPUT_PULLUP);   
  pinMode(buttonDown, INPUT_PULLUP); 
  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
  Serial.begin(9600); 
}

void loop() {
  // Baca status tombol
  if (digitalRead(buttonUp) == LOW) {
    delay(200); // Debouncing
    increaseSpeed(); // Tingkatkan kecepatan jika tombol ditekan
  }

  if (digitalRead(buttonDown) == LOW) {
    delay(200); // Debouncing
    decreaseSpeed(); // Turunkan kecepatan jika tombol ditekan
  }
  
  // Cek status kecepatan dan aktifkan relay sesuai
  updateFanSpeed();
}

void increaseSpeed() {
  if (speedState < 3) {
    speedState++; // Naikkan tingkat kecepatan
    Serial.print("Kecepatan naik: ");
    Serial.println(speedState);
  }
}

void decreaseSpeed() {
  if (speedState > 0) {
    speedState--; // Turunkan tingkat kecepatan
    Serial.print("Kecepatan turun: ");
    Serial.println(speedState);
  }
}

void updateFanSpeed() {
  switch(speedState) {
    case 0: // Matikan semua relay (Kipas mati)
      digitalWrite(relay1, LOW);
      digitalWrite(relay2, LOW);
      digitalWrite(relay3, LOW);
      Serial.println("Kipas mati");
      break;
      
    case 1: // Kecepatan rendah (Relay 1 aktif)
      digitalWrite(relay1, HIGH);
      digitalWrite(relay2, LOW);
      digitalWrite(relay3, LOW);
      Serial.println("Kecepatan rendah");
      break;

    case 2: // Kecepatan sedang (Relay 2 aktif)
      digitalWrite(relay1, LOW);
      digitalWrite(relay2, HIGH);
      digitalWrite(relay3, LOW);
      Serial.println("Kecepatan sedang");
      break;

    case 3: // Kecepatan tinggi (Relay 3 aktif)
      digitalWrite(relay1, LOW);
      digitalWrite(relay2, LOW);
      digitalWrite(relay3, HIGH);
      Serial.println("Kecepatan tinggi");
      break;
  }
}
$abcdeabcde151015202530fghijfghij
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module