Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Pinos de Entrada/Saida
- int sync = 10; //sinal de sincronismo com a rede eletrica (entrada)
- int trigger = 11; //pino que aciona o MOC3020 (saida)
- //Variaveis
- unsigned int timeToWait; //tempo de espera apos a passagem pelo zero para disparar 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 rede eletrica (constante)
- float increment; //variavel utilizada para variar mais lentamente a potencia quando o botao e mantido pressionado
- byte inc = 0;
- //---------------------------------------
- void setup()
- {
- pinMode(trigger, OUTPUT);
- pinMode(sync, INPUT);
- timeToWait = 8333; //para lampada iniciar apagada
- increment = 8333.0; //nessa condicao nao ocorrera disparo do TRIAC
- digitalWrite(trigger, LOW); //assegura que a saida ira iniciar em zero
- }
- //----------------------------------------
- void loop()
- {
- boolean turnOff = 0; //flag para indicar quando deve-se desligar a lampada
- boolean maxPower = 0; //flag para indicar quando deve-se transmitir potencia maxima para a lampada
- /*Testa botoes e valores limite para a variavel timeToWait*/
- if (inc == 0)
- {
- increment -= 0.33;
- if (increment <= 300)
- {
- inc = 1;
- }
- }
- else
- {
- increment += 0.33;
- if (increment >= 6000)
- {
- inc = 0;
- }
- }
- /*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*/
- if ( (turnOff == 0) && (state != previousState) ) {
- previousState = state; //armazena estado atual
- delayMicroseconds(timeToWait); //espera tempo para disparo
- digitalWrite(trigger, HIGH); //aciona sinal de disparo (trigger)
- delayMicroseconds(pulseWidth); //aguarda largura de pulso
- digitalWrite(trigger, LOW); //desliga pulso de disparo (trigger)
- }//end if
- }//end void loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement