Пробежим по радуге, но странное поведение...
- Войдите на сайт для отправки комментариев
Вс, 09/03/2014 - 22:57
Доброго времени суток, баловался с 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)
не гуру и не вникая в Ваш алгоритм,
но попробуйте заменить
sizeof(RGB) на конкретное значение, как минимум проверьте в сериале значения, совпадает с ожидаемымСпасибо, помогло, странное поведение...
А чего тут странного. Вы же запросили размер двухмерного массива. Догадайтесь какой именно размер вам предоставит система ...
>> А чего тут странного. Вы же запросили размер двухмерного массива. Догадайтесь какой
>> именно размер вам предоставит система ...
Видимо "испорчен" всякими скриптовыми языками(lua, python, php...) где двумерный массив, всего лишь массив чего либо, в частности массивов. И там (#, len, count) возвращают ожидаемое. Последний раз на C писал лет 20 назад. ;o)
Надо наверное как то так sizeof(RGB)/(sizeof(RLED)+sizeof(BLED)+sizeof(GLED)).