Você está na página 1de 2

//Pinos de Entrada/Saida

int sync = 22;


rada)
int trigger = 23;
int incButton = 24;
int decButton = 25;

//sinal de sincronismo com a rede eletrica (ent


//pino que aciona o MOC3020 (saida)
//botao de incremento da potencia (entrada)
//botao de decremento da potencia (entrada)

//Variaveis
unsigned int timeToWait; //tempo de espera apos a passagem pelo zero para dispa
rar o TRIAC (em microssegundos)
int pulseWidth;
//tempo de duracao do pulso de disparo
int state = 0;
//status do sinal de sincronismo
int previousState = 0;
//estado anterior do sinal de sincronismo
const int halfCycle = 8333;
//tempo em microssegundos de um semiciclo da re
de eletrica (constante)
float increment;
//variavel utilizada para variar mais lentament
e a potencia quando o botao e mantido pressionado

void setup(){
pinMode(trigger, OUTPUT);
pinMode(sync, INPUT);
pinMode(incButton, INPUT);
pinMode(decButton, INPUT);
timeToWait = 8333;
increment = 8333.0;

//para lampada iniciar apagada


//nessa condicao nao ocorrera disparo do TRIAC

digitalWrite(trigger, LOW); //assegura que a saida ira iniciar em zero


}

void loop(){
boolean turnOff = 0;
ampada
boolean maxPower = 0;
otencia maxima para a lampada

//flag para indicar quando deve-se desligar a l


//flag para indicar quando deve-se transmitir p

/*Testa botoes e valores limite para a variavel timeToWait*/


if( (digitalRead(incButton) == LOW)&&(increment >= 300) )
increment -= 0.33;
else if( (digitalRead(decButton) == LOW)&&(increment <= 6000) )
increment += 0.33;
/*timeToWait recebe somente a parte inteira de increment*/
timeToWait = (int)increment;
/*Habilita flags de acordo com o valor de timeToWait*/
if(timeToWait <= 300)
maxPower = 1;
else if(timeToWait >= 6000)
turnOff = 1;
/*Calcula tempo de duracao do pulso de disparo*/
if( (!maxPower)&&(!turnOff) ){
pulseWidth = halfCycle - timeToWait - 1000;
if(pulseWidth < 0)

pulseWidth = 0;
}
/*Le estado do sinal de sincronismo*/
state = digitalRead(sync);
/*Se a potencia for maxima, deixa o trigger acionado direto*/
if(maxPower)
digitalWrite(trigger, HIGH);
/*Se o estado do sinal de sincronismo mudou e a lampada nao deve ficar apagada
*/
else if( (turnOff == 0)&&(state != previousState) ){
previousState = state;
ual
delayMicroseconds(timeToWait);
disparo
digitalWrite(trigger, HIGH);
sparo (trigger)
delayMicroseconds(pulseWidth);
pulso
digitalWrite(trigger, LOW);
isparo (trigger)
}//end if
}//end void loop

//armazena estado at
//espera tempo para
//aciona sinal de di
//aguarda largura de
//desliga pulso de d

Você também pode gostar