Код: Выделить всё
1<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
1<<PINB2
delay_ms(300)
0<<PINB1
delay_ms(300)
0<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
0<<PINB2
delay_ms(300)
0<<PINB1Код: Выделить всё
1<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
1<<PINB2
delay_ms(300)
0<<PINB1
delay_ms(300)
0<<PINB0
delay_ms(300)
1<<PINB1
delay_ms(300)
0<<PINB2
delay_ms(300)
0<<PINB1Код: Выделить всё
void HSV2RGB (unsigned char &r, unsigned char &g, unsigned char &b,
unsigned int i_hue, unsigned char sat, unsigned char val)
/* Вход:
* 0 <= hue < 360 градусов - оттенок. Основные цвета:
* 0 - красный, 60 - желтый,
* 120 - зеленый, 180 - голубой
* 240 - синий, 300 - пурпурный
* hue == 360 - не определён
* 0 <= sat <= 255 - Saturation - насыщенность
* 0 <= val <= 255 - Value - яркость
*
* Выход:
* 0 <= r,g,b <= 255 - значения красного, зеленого, синего
*/
{
int ii;
double fr, hue;
unsigned char c1, c2, c3;
if (!sat)
r = g = b = val;
else
{ /* Хроматический цвет */
while (i_hue >= 360)
i_hue -= 360;
hue = i_hue;
ii = (int)(hue /= 60.0);
fr = hue - ii;
c1 = (val * (255 - sat)) / 255;
c2 = (val * (255 - sat * fr)) / 255;
c3 = (val * (255 - sat * (1.0 - fr))) / 255;
switch (ii)
{
case 0: r = val; g = c3; b = c1; break;
case 1: r = c2; g = val; b = c1; break;
case 2: r = c1; g = val; b = c3; break;
case 3: r = c1; g = c2; b = val; break;
case 4: r = c3; g = c1; b = val; break;
case 5: r = val; g = c1; b = c2; break;
}
}
}А как мне это сделать?! Что то переписать надо?! Я пока новичок в МК, не всё понимаю. . .WildCat писал(а):Все что нужно - сделать преобразование из HSV в RGB модель для светодиода.
Я же привел функцию. Ей даешь три параметра HSV модели, т.е. оттенок, насыщенность и яркость. А она возвращает три значения - уровни яркости для RGB диодов. Сама функция очень шустрая. Чтобы сделать радугу, нужно эту функцию гонять в цикле, меняя параметр Hue от 0 до 360 (359 если быть точным). А полученные значения выставлять на ШИМ для светодиодов. Чем меньше задержка в цикле, тем быстрее будут меняться цвета.просто КОТ писал(а):А как мне это сделать?! Что то переписать надо?! Я пока новичок в МК, не всё понимаю. . .