const uint8_t CLK = 4;
const uint8_t DT = 5;
const uint8_t SW = 6;
const uint8_t TRIAC = 2;
const uint8_t ZCD = 10;
const uint8_t POTENTIOMETER_PIN = A0;
int Waktu_Delay = 9500;
uint8_t lastCLK = HIGH;
uint8_t change = 1;
unsigned long lastDebounceTime = 0;
const uint16_t debounceDelay = 3;
static uint8_t lastZCD = LOW;
void setup() {
pinMode(ZCD, INPUT);
pinMode(TRIAC, OUTPUT);
pinMode(POTENTIOMETER_PIN, INPUT);
pinMode(CLK, INPUT_PULLUP);
pinMode(DT, INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
Serial.begin(9600);
while (!Serial);
lastCLK = digitalRead(CLK);
lastZCD = digitalRead(ZCD);
Serial.println("π‘ AC Dimmer Mulai | Mode: 1=Rotary, 2=Potentiomater");
Serial.println(" Waktu delay dalam microseconds ");
Serial.println("");
digitalWrite(TRIAC, HIGH);
delay(3000);
digitalWrite(TRIAC, LOW);
}
void loop() {
if (digitalRead(SW) == LOW) {
delay(50);
while (digitalRead(SW) == LOW);
change++;
if (change > 2) change = 1;
Serial.print("πMode: ");
Serial.println(change);
if (change == 1) {
lastCLK = digitalRead(CLK);
}
}
if (change == 2) {
int raw = analogRead(POTENTIOMETER_PIN);
Waktu_Delay = map(raw, 0, 1023, 500, 9500);
Waktu_Delay = constrain(Waktu_Delay, 500, 9500);
}
else if (change == 1) {
unsigned long currentTime = millis();
if (currentTime - lastDebounceTime >= debounceDelay) {
uint8_t clk = digitalRead(CLK);
uint8_t dt = digitalRead(DT);
if (clk != lastCLK && clk == HIGH) {
if (dt == HIGH) {
Waktu_Delay += 1000;
Serial.println("β² CCW | Gelap");
} else {
Waktu_Delay -= 1000;
Serial.println("β³ CW | Terang");
}
Waktu_Delay = constrain(Waktu_Delay, 500, 9500);
Serial.print("β Waktu_Delay = ");
Serial.println(Waktu_Delay);
}
lastCLK = clk;
lastDebounceTime = currentTime;
}
}
uint8_t zcdNow = digitalRead(ZCD);
// if (zcdNow == HIGH && lastZCD == LOW) {
if (zcdNow == HIGH) {
delayMicroseconds(Waktu_Delay);
digitalWrite(TRIAC, HIGH);
delayMicroseconds(10);
digitalWrite(TRIAC, LOW);
}
lastZCD = zcdNow;
}