Publicidade:

quarta-feira, 4 de maio de 2016

Arduino - Luminária com efeito fade-in

Projeto de uma luminária com efeito fade-in para 3 lâmpadas.

vídeo:

código-fonte:


/**********************************************************************************
************************************CLASSE UNIQUE RANDOM***************************
**********************************************************************************/
class UniqueRandom{
  private:
    int _index;
    int _min;
    int _max;
    int _size;
    int* _list;
    void _init(int min, int max) {
      _list = 0; 
      if (min < max) { _min = min; _max = max; } else { _min = max; _max = min; }
      _size = _max - _min; 
      _index = 0;
    }    
  public:
    UniqueRandom(int max)           { _init(0,   max); randomize(); } //construtor com 1 parametro
    UniqueRandom(int min, int max)  { _init(min, max); randomize(); } //construtor com 2 parametros
     
    void randomize() {
      if (_list == 0) { _list = (int*) malloc(size() * sizeof(int)); }  
      for (int i=0; i<size(); i++) {   _list[i] = _min+i;  }   //preenche a lista do menor ao maior valor
       
      //embaralha a lista
      for (int i=0; i<size(); i++) {  
        int r = random(0, size());     //sorteia uma posição qualquer
        int aux = _list[i];               
        _list[i] = _list[r];
        _list[r] = aux;
      }
    }
     
    int next() {                                  //retorna o proximo numero da lista
      int n = _list[_index++];
      if (_index >= size() ) { _index = 0;} //após recuper o ultimo numero, recomeça na posicao 0
      return n;
    }
     
    int size() { return _size; }
     
    ~UniqueRandom(){ free ( _list ); }  //destrutor
};
/**********************************************************************************
************************************FIM CLASSE UNIQUE RANDOM***********************
**********************************************************************************/

const int pins_pwm[] = {9, 10, 11};
const int num_pins = 3;

UniqueRandom ur(0, 3); //declaracao do objeto unique random

void setup() {
  for (int i=0;i<num_pins;i++){ pinMode(pins_pwm[i], OUTPUT); }
  
  randomSeed(analogRead(0));
  ur.randomize();
  
  efeito_02(random(14+3));
}


void efeito_02(int d){
  for (int i=0;i<num_pins;i++){
    efeito_02_on(pins_pwm[ur.next()], d);
  }
}

void efeito_02_on(int pin, int d){
  for (int i=0; i<256;i++ ){
    analogWrite(pin, i);
    delay(d);
    
    if (i<=50) { i++; }
    if (i>50) { i +=4; }
    if (i>185) { i +=8; }
  }
  analogWrite(pin, 255);
}

void loop() {}

Fade-Off

Nesse segundo vídeo, mostro uma ideia de como fazer o contrário, efeito de fade-off, ou seja, desligar as lâmpadas gradualmente.


Nenhum comentário:

Postar um comentário