помогите разобраться с кодом.

saftik
Offline
Зарегистрирован: 08.04.2015

Доброго времени суток господа.
Есть скетч управления rgb лентой. схема давно спаяна и все работает. И алгоритм примерно понятен
все бы ничего но любопытсво заело .
в часности непонятно        " int* value "         " (*value)--; "           " (&redVal, 1); "

Обьяснице пожалуйста  "на пальцах" как дословно читаются компилятором строки 37-55 !!!
 

// RGB LED - Automatic Color Cycling
//
// Matthew L Beckler 
// matthew at mbeckler dot org

int redPin = 12;
int bluePin = 10;
int greenPin = 9;

int redIn = 0;
int greenIn = 1;
int blueIn = 2;

int redVal;
int greenVal;
int blueVal;

void setup()
{
  redVal = 255;
  greenVal = 255;
  blueVal = 255;
  update();
}

// This function updates the LED outputs.
void update()
{
  analogWrite(redPin, redVal);
  analogWrite(greenPin, greenVal);
  analogWrite(bluePin, blueVal);
}

// This function updates one of the color variables
// either getting brighter or getting dimmer.
// It also updates the outputs and delays for 10 milliseconds.
void color_morph(int* value, int get_brighter)
{
  for (int i = 0; i < 255; i++)
  {
    if (get_brighter)
      (*value)--;
    else
      (*value)++;
      
    update();
    delay(10);
  }
}

void loop()
{
  // start out at black (all off)
  color_morph(&redVal,   1); // transition to red
  color_morph(&greenVal, 1); // transition to yellow
  color_morph(&redVal,   0); // transition to green
  color_morph(&blueVal,  1); // transition to aqua
  color_morph(&redVal,   1); // transition to white
  color_morph(&greenVal, 0); // transition to violet
  color_morph(&redVal,   0); // transition to blue
  color_morph(&blueVal,  0); // transition to black (all off)
}

 

strarbit
Offline
Зарегистрирован: 12.06.2016

тема указатели

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Для объяснения потребуется курс программирования. Имена и указатели. В функцию передается имя переменной (указатель на нее). Эта переменная в цикле меняется.
*a читается как «данные по адресу a»;
&x читается как «адрес x»;
Само собой разумеется, что *(&b) Есть просто само b.
То есть *(&b) = 456 это тоже самое, что написать b = 456;