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 |
--- 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());
+ }
+ }
+
+
+ }
}