Пробежим по радуге, но странное поведение...

Zillah
Offline
Зарегистрирован: 09.03.2014

Доброго времени суток, баловался с RGB светодиодом, решил попробовать простую задачку, пробежаться по радуге, собственно код простой:

// init
const int RLED = 10;
const int GLED = 9;
const int BLED = 11;
const int RGB[9][3] = {{0, 0, 0}, {255, 0, 0}, {255, 128, 0}, {255, 255, 0}, {0, 255, 0}, {0, 255, 255}, {0, 0, 255}, {255, 0, 255}, {255, 255, 255}};
const int STEP = 256;

void setup() {
  // put your setup code here, to run once:
  pinMode(RLED, OUTPUT);
  pinMode(GLED, OUTPUT);
  pinMode(BLED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  float DR = 0.0, DG = 0.0, DB = 0.0, R = 0.0, G = 0.0, B = 0.0;
  for (int i = 0; i < sizeof(RGB) - 1; i++) {
    // вычисляем дельта
    DR = (RGB[i + 1][0] - RGB[i][0]) / float(STEP);
    DG = (RGB[i + 1][1] - RGB[i][1]) / float(STEP);
    DB = (RGB[i + 1][2] - RGB[i][2]) / float(STEP);
    // сохраняем текущее RGB
    R = RGB[i][0];
    G = RGB[i][1];
    B = RGB[i][2];
    for (int j = 0; j < STEP - 1; j++) {
      R += DR;
      G += DG;
      B += DB;
      analogWrite(RLED, R);
      analogWrite(GLED, G);
      analogWrite(BLED, B);
      delay(30);
    }
  }
}

только вот поведение странно, 1-й пробег в loop() все как и ожидалось, но далее начинается свистопляска со старнными подмигиваниями цветов, мб есть гуру что тыкнут новичка носом в косяк? ;o)

Looka
Offline
Зарегистрирован: 24.04.2012

не гуру и не вникая в Ваш алгоритм,  

но попробуйте  заменить   sizeof(RGB)   на конкретное значение,  как минимум проверьте в сериале значения, совпадает с ожидаемым

Zillah
Offline
Зарегистрирован: 09.03.2014

Спасибо, помогло, странное поведение...

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А чего тут странного. Вы же запросили размер двухмерного массива. Догадайтесь какой именно размер вам предоставит система ... 

Zillah
Offline
Зарегистрирован: 09.03.2014

>> А чего тут странного. Вы же запросили размер двухмерного массива. Догадайтесь какой
>> именно размер вам предоставит система ...

Видимо "испорчен" всякими скриптовыми языками(lua, python, php...) где двумерный массив, всего лишь массив чего либо, в частности массивов. И там (#, len, count) возвращают ожидаемое. Последний раз на C писал лет 20 назад. ;o)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Надо наверное как то так sizeof(RGB)/(sizeof(RLED)+sizeof(BLED)+sizeof(GLED)).