RuiViana

Dimmer_serial

Oct 17th, 2016
177
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Rotina para dimmer. (110v ou 220v)  comandado pela serial
  2. // Os valores de brilho da lampada são enviados ao Arduino pelo Serial Monitor.
  3. // O Serial monitor deve ser configurado como "No line ending".
  4. // Os valoes vão de 0 (min) a 100(max).
  5. // Uso didático
  6. // Rui  01/05/2015
  7. //***************  Variaveis e constantes  *************
  8.   int LAMP = 3;                                   // Pino de disparo do Triac
  9.   unsigned int dimming = 115;                     // Variavel para tempo de retardo. Valor Inicial Minimo
  10.   String str;                                     // Variavel string para receber dados da Serial
  11.  
  12. //***********************  Setup ********************  
  13.   void setup()                                    // Rotina de setup
  14.   {
  15.     Serial.begin(9600);                           // Inicializa a serial a 9600 bps
  16.     pinMode(LAMP, OUTPUT);                        // Define o pino(D3) LAMP como saída
  17.     attachInterrupt(0, zero_cross, RISING);       // Enable interrupt no pino D2
  18.     Serial.println("Digite o valor de brilho de 0 min a 100 max");      // Mensagem de entrada  
  19.   }
  20. //***********************  Loop ********************
  21.   void loop()                                     // Rotina de loop
  22.   {
  23.     if(Serial.available() > 0)                    // Verifica se tem dados disponiveis na serial
  24.     {
  25.         str = Serial.readStringUntil('\n');       // Le os dados da serial para uma string
  26.         dimming = str.toInt();                    // Transforma a string em Interio
  27.             Serial.println(dimming);              // Eco da entrada da serial
  28.         dimming = (118-dimming)*68;               // Calcula o retardo para o disparo do triac
  29.         if (dimming <1224) dimming = 1224;        // Valor para o brilho máximo 1224
  30.         if (dimming >7820) dimming = 7820;        // Valor para o brilho minimo 7820
  31.     }
  32.     delay(10);
  33.   }
  34. //******************** Zero_Cross_Int ****************
  35.   void zero_cross()                               // Rotina chamada à cada interrupt causada pelo zero cross do AC
  36.   {  
  37.     delayMicroseconds(dimming);                   // Restardo calculado
  38.     digitalWrite(LAMP, HIGH);                     // Dispara o Triac  
  39.     delayMicroseconds(8.33);                      // Duração do pulso de disparo                  
  40.     digitalWrite(LAMP, LOW);                      // Desliga pulso de disparo  
  41.   }
RAW Paste Data