atmega328p ile AC220 dimmer devresi problemi

Merhaba Yapmıs oldugum projenin ıkı adet push butonu var. yapmak istediğim up butona bastıgımda lambanın 64 int pas ile devreye baslaması ve 128 de dımming yapması. fakat ne zaman butona up butona bassam lamba dırek yanyor. ve down buttonda dırek sonyor. dımmer mantıgı ıle calısmıyor. nerede yanlışlık yapıyorum veya konuyla ılgılı ornek bır program verebilirmisin. bu benim programım. #include < TimerOne.h> volatile int i=0; volatile boolean zero_cross=0; int up = 4; int down = 5; int AC_pin = 3; int sa = 128; int pas = 64; int freq = 75; void setup() { pinMode(up, INPUT); pinMode(down, INPUT); pinMode(AC_pin, OUTPUT); attachInterrupt(0, zero_cross_detect, RISING); Timer1.initialize(freq); Timer1.attachInterrupt(dim_check, freq); } void zero_cross_detect() { zero_cross = true; i=0; digitalWrite(AC_pin, LOW); } void dim_check() { if(zero_cross == true) { if(i>=sa) { digitalWrite(AC_pin, HIGH); i=0; zero_cross=false; } else { i++; } } } void loop() { if (digitalRead(up) == LOW) { if (sa<125) { sa = sa + pas; } } if (digitalRead(down) == LOW) { if (sa>5) { sa = sa - pas; } } while (digitalRead(up) == LOW) { } delay(10); while (digitalRead(down) == LOW) { } delay(10); }

alttaki kod up-down tuşlarında parlaklığı basitçe ayarlaması lazım. void loop() { if (digitalRead(up) == LOW){ if (sa<128){sa = sa + 1;delay(10);} } if (digitalRead(down) == LOW){ if (sa>0){sa = sa - 1;delay(10);} } }

up ve down tuşları ile zaman ayarlayıcı arasındaki frekans zamanını tutturmakta sorun var gözükoyor.