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