projeto mood lamp

o codigo abaixo alterna as cores de led usando sistema RGB sao usados leds verm,azul,verde

Estou com duvida em um trecho:

float rgb1[3],rgb2[3],inc[3];
int red,green,blue;
int redpin=11,greenpin=10,bluepin=9;

void setup()
{
  randomSeed(analogRead(0));
  rgb1[0]=0;
  rgb1[1]=0;
  rgb1[2]=0;
  
  rgb2[0]=random(256);
  rgb2[1]=random(256);
  rgb2[2]=random(256);        }
  
void loop()
{
  randomSeed(analogRead(0));
  
  
for(int x=0;x<3;x++) //aqui ele subtrai 0 de um numero aleatorio ,mas nao entendo a necessidade
  {                                // da divisao /256
    inc[x]=(rgb1[x]-rgb2[x])/256; }
    

  for(int x=0;x<256;x++)
  {
    red=int(rgb1[0]);
    green=int(rgb1[1]);
    blue=int(rgb1[2]);
    
    analogWrite(redpin,red);
        analogWrite(greenpin,green);
            analogWrite(bluepin,blue);
    delay(100);
    
    rgb1[0]-=inc[0];
    rgb1[1]-=inc[1];
    rgb1[2]-=inc[2];
  }
  
    for(int x=0;x<3;x++)
    {
      rgb2[x]=random(556)-300;
      rgb2[x]=constrain(rgb2[x],0,255);
      delay(1000);
    }
}

Não é que ele subtrai 0.

0 é um dos valores que pode estar dentro das variáveis que utiliza x.

Se você olhar no for(), há um comando que diz para ele somar +1 ao x (x++);

Esse valor irá de 0 até 3, mas a condição de verificação para execução da função é de 0 até 2 (x < 3).

Isto sana suas dúvidas ou ainda está?

A divisão por 256 serve para que a var. inc fique com valores entre 0 e 1 (ou entre 0 e -1).

luisilva entendi grato.

gscndelari

GSCANDELARI:
Não é que ele subtrai 0.

0 é um dos valores que pode estar dentro das variáveis que utiliza x.

Se você olhar no for(), há um comando que diz para ele somar +1 ao x (x++);

Esse valor irá de 0 até 3, mas a condição de verificação para execução da função é de 0 até 2 (x < 3).

Isto sana suas dúvidas ou ainda está?

mas o vetor rgb está preenchido por zeros.

Não é o vector rgb que está preenchido por zeros, mas sim o vector rgb1. Como o vector rgb2 tem valores aleatórios, ao fazer a operação:

inc[x]=(rgb1[x]-rgb2[x])/256

supondo que o valor aleatório de rgb2 é 198, o cálculo que estaria a ser executado seria:

inc[x] = (0 - 198) / 256

isto daria -0,7734.

Este valor servirá, no 'for' seguinte para fazer o passo (ou incremento) que é dado ao valor do LED.

Sendo assim, como disse anteriormente, o cálculo serve para achar um valor aleatório entre 0 e 1 (ou como o resultado é negativo, entre 0 e -1).

Ok luis eu entendia assim mesmo o que nao entendo é pra que colocar o vetor rgb1? se ele zero bastaria deixar o rgb2 ser divido por 256!!!

^^