Displays a gradient between two colors
Dependencies: mbed WS2812 PixelArray
Revision 3:5fd199581f15, committed 2021-04-22
- Comitter:
- radmir102
- Date:
- Thu Apr 22 10:16:59 2021 +0000
- Parent:
- 2:c4a43cc93ca8
- Commit message:
- realise prog
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r c4a43cc93ca8 -r 5fd199581f15 main.cpp --- a/main.cpp Wed Apr 21 12:40:36 2021 +0000 +++ b/main.cpp Thu Apr 22 10:16:59 2021 +0000 @@ -3,26 +3,26 @@ #include <stdio.h> #include "PixelArray.h" -#define WS2812_BUF 16 //number of LEDs in the array -#define NUM_COLORS 14 //number of colors to store in the array -#define PIN_NUM A2 -#define LIGHT_INTENSITY 30 + +#define WS2812_BUF 16 //количество светодиодов в матрице +#define NUM_COLORS 15 //количество цветов +#define PIN_NUM A2 // номер пина + + using namespace std; -PixelArray px(WS2812_BUF); -DigitalIn usrBtn(USER_BUTTON); +PixelArray px(WS2812_BUF); // обращение к объекту класса матрицы +//WS2812 ws(PIN_NUM, WS2812_BUF,6,17,9,14); //обращение к объекту класса светодиодного модуля +WS2812 ws(PIN_NUM, WS2812_BUF,3,12,9,12); -// See the program page for information on the timing numbers -WS2812 ws(PIN_NUM, WS2812_BUF,6,17,9,14); //nucleo-f411re - -int color_set(uint8_t red,uint8_t green, uint8_t blue) +int color_set(uint8_t red,uint8_t green, uint8_t blue) // функция установки цвета { return ((red<<16) + (green<<8) + blue); } -// 0 <= stepNumber <= lastStepNumber +// функция получения градиента int interpolate(int startValue, int endValue, int stepNumber, int lastStepNumber) { return (endValue - startValue) * stepNumber / lastStepNumber + startValue; @@ -33,150 +33,69 @@ uint8_t ir = 0; uint8_t ig = 0; uint8_t ib = 0; - int btnState = 0; + - ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling + ws.useII(WS2812::PER_PIXEL); //дает возможность установить яркость - // set up the colours we want to draw with + // установка цветов, которыми мы хотим воспользоваться int colorbuf[NUM_COLORS] = {0xff0000,0x00FFFF,0x0000FF,0xFF00FF,0x808080,0x00FF00, 0xFF0000,0xFFFFFF,0xFFFF00,0x008080,0xFF0099,0xFFF0F5, - 0x991199,0x808000}; + 0x991199,0x808000,0xFFFFF0}; - //get starting RGB components for interpolation + //получить начальные компоненты RGB для градиента size_t c1 = colorbuf[0]; size_t r1 = (c1 & 0xff0000) >> 16; size_t g1 = (c1 & 0x00FFFF) >> 8; size_t b1 = (c1 & 0x0000FF); - //get ending RGB components for interpolation + //получить конечные компоненты RGB для градиента size_t c2 = colorbuf[1]; size_t r2 = (c2 & 0xFF00FF) >> 16; size_t g2 = (c2 & 0x808080) >> 8; size_t b2 = (c2 & 0x00FF00); + //получение градиента for (int i = 0; i <= WS2812_BUF; i++) - { + { ir = interpolate(r1, r2, i, WS2812_BUF); ig = interpolate(g1, g2, i, WS2812_BUF); ib = interpolate(b1, b2, i, WS2812_BUF); - //write the color value for each pixel - px.Set(i, color_set(ir,ig,ib)); - //write the II value for each pixel - - - } - - // цикл плавного прохода по каждому светодиоду и обратное угасание - while(true){ - for (int i = 0; i<WS2812_BUF; i++){ - for (int j = 0; j<30 ; j++){ - px.SetI(i, j); - wait(0.01); - ws.write(px.getBuf()); - } + px.Set(i, color_set(ir,ig,ib)); // установка для каждого светодиода (i), градиентного цвета(color_set(ir,ig,ib)) + } - for (int x = WS2812_BUF; x>=0; x-- ) - for (int j = 30; j>0 ; j--){ - px.SetI(x, j); - wait(0.01); - ws.write(px.getBuf()); - } - } - - // цикл плавного прохода по диагонали - /*while(true){ - for (int x = 0; x<=20; x+=5 ){ - for(int i = 0; i<30; i++){ - px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); - } - } - - for (int x = 20; x>=0; x-=5 ){ - for(int i = 30; i>=0; i--){ - px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); + // Цикл плавного крестика + while(true){ + // цикл включения главной диагонали + for (int x = 0; x<=15; x+=5 ){ + for(int i = 0; i<255; i++){ + px.SetI(x,i); // обращение к светодиоду (x) и установка яркости (i) + ws.write(px.getBuf()); // вывод на матрицу (запуск) + } } - }}*/ - - // Цикл плавного крестика - /* - while(true){ - for (int x = 0; x<=20; x+=5 ){ - for(int i = 0; i<30; i++){ - px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); - } - } + //цикл включения побочной диагонали for (int x = 3; x<=12; x+=3 ){ - for(int i = 0; i<30; i++){ + for(int i = 0; i<255; i++){ px.SetI(x,i); - wait(0.01); ws.write(px.getBuf()); - } - } - for (int x = 12; x>=3; x-=3 ){ - for(int i = 30; i>=0; i--){ - px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); - } + } } - - for (int x = 0; x<=20; x-=5 ){ - for(int i = 30; i>=0; i--){ + // цикл выключения побочной диагонали + for (int x = 12; x>=3; x-=3 ){ + for(int i = 255; i>=0; i--){ px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); - } - } - } - */ - /* int d = 20; - while(true){ - for (int x = 0; x<=20; x+=5 ){ - for(int i = 0; i<30; i++){ - px.SetI(x,i); - wait(0.01); - px.SetI(d-=2,i); - wait(0.01); - ws.write(px.getBuf()); - } - } - - for (int x = 12; x>=3; x-=3 ){ - for(int i = 30; i>=0; i--){ - px.SetI(x,i); - wait(0.01); ws.write(px.getBuf()); - } - } - - for (int x = 0; x<=20; x-=5 ){ - for(int i = 30; i>=0; i--){ - px.SetI(x,i); - wait(0.01); - ws.write(px.getBuf()); - } - } + } } - */ - - - - - - /* - for (int i = WS2812_BUF; i >= 0; i--) - { - ws.write(px.getBuf()); - }*/ - - - + // цикл выключения главной диагонали + for (int x = 15; x>=0; x-=5 ){ + for(int i = 255; i>=0; i--){ + px.SetI(x,i); + ws.write(px.getBuf()); + } + } + + + } }