RuiViana

CK_Dimmer

Oct 25th, 2016
138
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Pinos de Entrada/Saida
  2. int sync = 10;                   //sinal de sincronismo com a rede eletrica (entrada)
  3. int trigger = 11;                //pino que aciona o MOC3020 (saida)
  4.  
  5.  
  6. //Variaveis
  7. unsigned int timeToWait;        //tempo de espera apos a passagem pelo zero para disparar o TRIAC (em microssegundos)
  8. int pulseWidth;                  //tempo de duracao do pulso de disparo
  9. int state = 0;                   //status do sinal de sincronismo
  10. int previousState = 0;           //estado anterior do sinal de sincronismo
  11. const int halfCycle = 8333;      //tempo em microssegundos de um semiciclo da rede eletrica (constante)
  12. float increment;                 //variavel utilizada para variar mais lentamente a potencia quando o botao e mantido pressionado
  13. byte inc = 0;
  14. //---------------------------------------
  15. void setup()
  16. {
  17.   pinMode(trigger, OUTPUT);
  18.   pinMode(sync, INPUT);
  19.   timeToWait = 8333;           //para lampada iniciar apagada
  20.   increment = 8333.0;          //nessa condicao nao ocorrera disparo do TRIAC
  21.   digitalWrite(trigger, LOW);  //assegura que a saida ira iniciar em zero
  22. }
  23. //----------------------------------------
  24. void loop()
  25. {
  26.   boolean turnOff = 0;            //flag para indicar quando deve-se desligar a lampada
  27.   boolean maxPower = 0;           //flag para indicar quando deve-se transmitir potencia maxima para a lampada
  28.  
  29.   /*Testa botoes e valores limite para a variavel timeToWait*/
  30.  
  31.  
  32.   if (inc  == 0)
  33.   {
  34.     increment -= 0.33;
  35.     if (increment <= 300)
  36.     {
  37.       inc = 1;
  38.     }
  39.   }
  40.  
  41.   else
  42.   {
  43.     increment += 0.33;
  44.     if (increment >= 6000)
  45.     {
  46.       inc = 0;
  47.     }
  48.   }
  49.  
  50.  
  51.   /*timeToWait recebe somente a parte inteira de increment*/
  52.   timeToWait = (int)increment;
  53.  
  54.   /*Habilita flags de acordo com o valor de timeToWait*/
  55.   if (timeToWait <= 300)
  56.     maxPower = 1;
  57.   else if (timeToWait >= 6000)
  58.     turnOff = 1;
  59.  
  60.   /*Calcula tempo de duracao do pulso de disparo*/
  61.   if ( (!maxPower) && (!turnOff) ) {
  62.     pulseWidth = halfCycle - timeToWait - 1000;
  63.     if (pulseWidth < 0)
  64.       pulseWidth = 0;
  65.   }
  66.  
  67.   /*Le estado do sinal de sincronismo*/
  68.   state = digitalRead(sync);
  69.  
  70.   /*Se a potencia for maxima, deixa o trigger acionado direto*/
  71.   //if(maxPower)
  72.   //digitalWrite(trigger, HIGH);
  73.   /*Se o estado do sinal de sincronismo mudou e a lampada nao deve ficar apagada*/
  74.   if ( (turnOff == 0) && (state != previousState) ) {
  75.     previousState = state;                                //armazena estado atual
  76.     delayMicroseconds(timeToWait);                        //espera tempo para disparo
  77.     digitalWrite(trigger, HIGH);                          //aciona sinal de disparo (trigger)
  78.     delayMicroseconds(pulseWidth);                        //aguarda largura de pulso
  79.     digitalWrite(trigger, LOW);                           //desliga pulso de disparo (trigger)
  80.   }//end if
  81. }//end void loop
RAW Paste Data