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