LISTING PROGRAM
1.
Program Mikrokontroller Arduino Uno A
#include <TimerOne.h>
volatile boolean zero_cross=0; // variable kondisi zero-cross int AC_pin = 5; // Output pwm ke triac (kanan) int dim = 0; // Dimming level (0-128) 0 = on, 198 = 0ff
int inc=1; // counting up or down, 1=up, -1=down
int freqStep = 60; // This is the delay-per-brightness step in microseconds.
// data pembanding intensitas dimmer int maxDim = 190;
Serial.begin(9600); // membuka gate komunikasi arduino ke bluetooth dengan kecepatan transfer data 9600
pinMode(AC_pin, OUTPUT); // Set the Triac pin as output
attachInterrupt(0, zero_cross_detect, RISING); // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection. daftar interup
Timer1.initialize(freqStep); // Initialize TimerOne library for the freq we need
Timer1.attachInterrupt(dim_check, freqStep); //aktifkan interup
}
void zero_cross_detect() {
zero_cross = true; // set the boolean to true to tell our dimming function that a zero cross has occured
i=0;
digitalWrite(AC_pin, LOW); // turn off TRIAC (and AC) }
if(zero_cross == true) {
if(Serial.available() > 0){ char a = Serial.read(); berupa angka yang akan mengontrol dimmer
dataCheck = "";
if(millis() > timeser + 500) //update tiap 500 milisecond {
convertToDim();
// Serial.println("dataCheck >>>>>>>> " + String(dataCheck_2));
// Serial.println("dataDim >>>>>>>> " + String(dataDim)); // Serial.println(" ");
timeser = millis(); //restart counter timer }
}
void convertToDim(){
int dataDim1 = dataCheck_2.toInt();
float dataDim2 = (maxDim-minDim) * dataDim1/100.0; dataDim = maxDim - dataDim2;
// convert data to dim lamp
if(dataCheck_2 != prevDataCheck_2){ //Serial.println("Dimming Now"); dim = dataDim;
prevDataCheck_2 = dataCheck_2; }
2.
Program Mikrokontroller Arduino Uno B
#include <TimerOne.h>
String dataCheck;
String dataCheck_2;
String prevDataCheck_2;
bool firstChar = false;
unsigned long timeser;
volatile int i=0; // counter interup
volatile boolean zero_cross=0; // variable kondisi zero-cross
int AC_pin = 5; // Output pwm ke triac (kanan)
int dim = 0; // Dimming level (0-128) 0 = on, 198 = 0ff
int inc=1; // counting up or down, 1=up, -1=down
int freqStep = 60; // This is the delay-per-brightness step in microseconds.
// data pembanding intensitas dimmer
int maxDim = 190;
int minDim = 10;
int dataDim;
// fungsi pengkondisian awal
void setup()
{
Serial.begin(9600); // membuka gate komunikasi arduino ke bluetooth dengan kecepatan transfer data 9600
pinMode(AC_pin, OUTPUT); // Set the Triac pin as output
Timer1.initialize(freqStep); // Initialize TimerOne library for the freq we need
Timer1.attachInterrupt(dim_check, freqStep); //aktifkan interup
}
void zero_cross_detect() {
zero_cross = true; // set the boolean to true to tell our dimming function that a zero cross has occured
i=0;
digitalWrite(AC_pin, LOW); // turn off TRIAC (and AC)
}
// Turn on the TRIAC at the appropriate time
void dim_check() {
if(zero_cross == true) {
if(i>=dim) {
digitalWrite(AC_pin, HIGH); // turn on light
i=0; // reset time step counter
zero_cross = false; //reset zero cross detection
}
else {
i++; // increment time step counter
}
}
}
//sistem looping
void loop ()
{
if(Serial.available() > 0){
char a = Serial.read();
else if(a != '#' && firstChar == true){
dataCheck += (String)a;
}
else if(a == '#'){
dataCheck_2 = dataCheck;
dataCheck = "";
firstChar = false;
//Serial.println("#|" + dataCheck_2 );
}
else {
}
}
printData();
}
void printData(){
if(millis() > timeser + 500)
{
convertToDim();
// Serial.println("dataCheck >>>>>>>> " + String(dataCheck_2));
// Serial.println("dataDim >>>>>>>> " + String(dataDim));
// Serial.println(" ");
timeser = millis();
}
}
void convertToDim(){
int dataDim1 = dataCheck_2.toInt();
float dataDim2 = (maxDim-minDim) * dataDim1/100.0;
// convert data to dim lamp
if(dataCheck_2 != prevDataCheck_2){
//Serial.println("Dimming Now");
dim = dataDim;
prevDataCheck_2 = dataCheck_2;
}
else{}}