Пробежим по радуге, но странное поведение...
- Войдите на сайт для отправки комментариев
Вс, 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)).