Code/Program AC LIGHT DIMMER ARDUINO


#include  <TimerOne.h>       
volatile int i=0;             
volatile boolean zero_cross=0; 
int AC_pin = 3;                // Output ke Opto Triac
int dim = 0;                    // Dimming level (0-128)  0 = on, 128 = 0ff
int inc=1;                      // Menghitung naik atau turun , 1=up, -1=down
int freqStep = 75;   

void setup() {                                      // mulai set up
  pinMode(AC_pin, OUTPUT);                          // Set  Triac pin menjadi output
  attachInterrupt(0, zero_cross_detect, RISING);    // memberikan Interupt ke Pin 2 (interupt 0) untuk mendeteksi Zero Cross
  Timer1.initialize(freqStep);                     
  Timer1.attachInterrupt(dim_check, freqStep);     
}
void zero_cross_detect() {   
  zero_cross = true; 
  i=0;
  digitalWrite(AC_pin, LOW);     
}                               


void dim_check() {                 
  if(zero_cross == true) {             
    if(i>=dim) {                   
      digitalWrite(AC_pin, HIGH); // lampu menyala     
      i=0;  // reset waktu step counter                       
      zero_cross = false; //reset zero cross detection
    }
    else {
      i++; // increment time step counter                   
    }                               
  }                                 
}                                 
void loop() {                       
  dim+=inc;
  if((dim>=128) || (dim<=0))
    inc*=-1;
  delay(18);
}

Share this

Related Posts

Latest
Previous
Next Post »