const int zeroCrossPin = 2; // Zero-crossing detection pin (D2) const int triacPin = 12; // Triac control pin (D12) volatile bool zeroCrossDetected = false; void zeroCrossingInterrupt() { zeroCrossDetected = true; } void setup() { pinMode(triacPin, OUTPUT); pinMode(zeroCrossPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(zeroCrossPin), zeroCrossingInterrupt, RISING); } void loop() { static uint16_t power = 7000;//map(analogRead(A0),0,1024,9990,0); if (zeroCrossDetected) { digitalWrite(triacPin, LOW); // Ignite the triac delayMicroseconds(power); // Delay for the desired phase angle (adjust as needed) digitalWrite(triacPin, HIGH); // Turn off the triac zeroCrossDetected = false; } }