Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed WS2812 PixelArray
main.cpp@2:c4a43cc93ca8, 2021-04-21 (annotated)
- Committer:
- radmir102
- Date:
- Wed Apr 21 12:40:36 2021 +0000
- Revision:
- 2:c4a43cc93ca8
- Parent:
- 1:3fa4e131f518
- Child:
- 3:5fd199581f15
message
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| theros | 0:3bb97062a703 | 1 | #include "mbed.h" |
| theros | 0:3bb97062a703 | 2 | #include "WS2812.h" |
| radmir102 | 2:c4a43cc93ca8 | 3 | #include <stdio.h> |
| theros | 0:3bb97062a703 | 4 | #include "PixelArray.h" |
| theros | 0:3bb97062a703 | 5 | |
| radmir102 | 1:3fa4e131f518 | 6 | #define WS2812_BUF 16 //number of LEDs in the array |
| radmir102 | 2:c4a43cc93ca8 | 7 | #define NUM_COLORS 14 //number of colors to store in the array |
| radmir102 | 1:3fa4e131f518 | 8 | #define PIN_NUM A2 |
| radmir102 | 1:3fa4e131f518 | 9 | #define LIGHT_INTENSITY 30 |
| theros | 0:3bb97062a703 | 10 | |
| radmir102 | 1:3fa4e131f518 | 11 | using namespace std; |
| radmir102 | 2:c4a43cc93ca8 | 12 | |
| theros | 0:3bb97062a703 | 13 | PixelArray px(WS2812_BUF); |
| radmir102 | 1:3fa4e131f518 | 14 | DigitalIn usrBtn(USER_BUTTON); |
| radmir102 | 1:3fa4e131f518 | 15 | |
| theros | 0:3bb97062a703 | 16 | |
| theros | 0:3bb97062a703 | 17 | // See the program page for information on the timing numbers |
| radmir102 | 1:3fa4e131f518 | 18 | WS2812 ws(PIN_NUM, WS2812_BUF,6,17,9,14); //nucleo-f411re |
| theros | 0:3bb97062a703 | 19 | |
| theros | 0:3bb97062a703 | 20 | int color_set(uint8_t red,uint8_t green, uint8_t blue) |
| theros | 0:3bb97062a703 | 21 | { |
| theros | 0:3bb97062a703 | 22 | return ((red<<16) + (green<<8) + blue); |
| theros | 0:3bb97062a703 | 23 | } |
| theros | 0:3bb97062a703 | 24 | |
| theros | 0:3bb97062a703 | 25 | // 0 <= stepNumber <= lastStepNumber |
| theros | 0:3bb97062a703 | 26 | int interpolate(int startValue, int endValue, int stepNumber, int lastStepNumber) |
| theros | 0:3bb97062a703 | 27 | { |
| theros | 0:3bb97062a703 | 28 | return (endValue - startValue) * stepNumber / lastStepNumber + startValue; |
| theros | 0:3bb97062a703 | 29 | } |
| theros | 0:3bb97062a703 | 30 | |
| theros | 0:3bb97062a703 | 31 | int main() |
| theros | 0:3bb97062a703 | 32 | { |
| theros | 0:3bb97062a703 | 33 | uint8_t ir = 0; |
| theros | 0:3bb97062a703 | 34 | uint8_t ig = 0; |
| theros | 0:3bb97062a703 | 35 | uint8_t ib = 0; |
| radmir102 | 1:3fa4e131f518 | 36 | int btnState = 0; |
| theros | 0:3bb97062a703 | 37 | |
| theros | 0:3bb97062a703 | 38 | ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling |
| theros | 0:3bb97062a703 | 39 | |
| theros | 0:3bb97062a703 | 40 | // set up the colours we want to draw with |
| radmir102 | 2:c4a43cc93ca8 | 41 | int colorbuf[NUM_COLORS] = {0xff0000,0x00FFFF,0x0000FF,0xFF00FF,0x808080,0x00FF00, |
| radmir102 | 2:c4a43cc93ca8 | 42 | 0xFF0000,0xFFFFFF,0xFFFF00,0x008080,0xFF0099,0xFFF0F5, |
| radmir102 | 2:c4a43cc93ca8 | 43 | 0x991199,0x808000}; |
| theros | 0:3bb97062a703 | 44 | |
| theros | 0:3bb97062a703 | 45 | //get starting RGB components for interpolation |
| radmir102 | 1:3fa4e131f518 | 46 | size_t c1 = colorbuf[0]; |
| radmir102 | 1:3fa4e131f518 | 47 | size_t r1 = (c1 & 0xff0000) >> 16; |
| radmir102 | 2:c4a43cc93ca8 | 48 | size_t g1 = (c1 & 0x00FFFF) >> 8; |
| radmir102 | 2:c4a43cc93ca8 | 49 | size_t b1 = (c1 & 0x0000FF); |
| theros | 0:3bb97062a703 | 50 | |
| theros | 0:3bb97062a703 | 51 | //get ending RGB components for interpolation |
| radmir102 | 1:3fa4e131f518 | 52 | size_t c2 = colorbuf[1]; |
| radmir102 | 2:c4a43cc93ca8 | 53 | size_t r2 = (c2 & 0xFF00FF) >> 16; |
| radmir102 | 2:c4a43cc93ca8 | 54 | size_t g2 = (c2 & 0x808080) >> 8; |
| radmir102 | 2:c4a43cc93ca8 | 55 | size_t b2 = (c2 & 0x00FF00); |
| theros | 0:3bb97062a703 | 56 | |
| theros | 0:3bb97062a703 | 57 | for (int i = 0; i <= WS2812_BUF; i++) |
| theros | 0:3bb97062a703 | 58 | { |
| theros | 0:3bb97062a703 | 59 | ir = interpolate(r1, r2, i, WS2812_BUF); |
| theros | 0:3bb97062a703 | 60 | ig = interpolate(g1, g2, i, WS2812_BUF); |
| theros | 0:3bb97062a703 | 61 | ib = interpolate(b1, b2, i, WS2812_BUF); |
| theros | 0:3bb97062a703 | 62 | //write the color value for each pixel |
| theros | 0:3bb97062a703 | 63 | px.Set(i, color_set(ir,ig,ib)); |
| radmir102 | 2:c4a43cc93ca8 | 64 | //write the II value for each pixel |
| radmir102 | 2:c4a43cc93ca8 | 65 | |
| radmir102 | 1:3fa4e131f518 | 66 | |
| radmir102 | 2:c4a43cc93ca8 | 67 | } |
| radmir102 | 2:c4a43cc93ca8 | 68 | |
| radmir102 | 2:c4a43cc93ca8 | 69 | // цикл плавного прохода по каждому светодиоду и обратное угасание |
| radmir102 | 2:c4a43cc93ca8 | 70 | while(true){ |
| radmir102 | 2:c4a43cc93ca8 | 71 | for (int i = 0; i<WS2812_BUF; i++){ |
| radmir102 | 2:c4a43cc93ca8 | 72 | for (int j = 0; j<30 ; j++){ |
| radmir102 | 2:c4a43cc93ca8 | 73 | px.SetI(i, j); |
| radmir102 | 2:c4a43cc93ca8 | 74 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 75 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 76 | } |
| radmir102 | 2:c4a43cc93ca8 | 77 | } |
| radmir102 | 2:c4a43cc93ca8 | 78 | |
| radmir102 | 2:c4a43cc93ca8 | 79 | |
| radmir102 | 2:c4a43cc93ca8 | 80 | for (int x = WS2812_BUF; x>=0; x-- ) |
| radmir102 | 2:c4a43cc93ca8 | 81 | for (int j = 30; j>0 ; j--){ |
| radmir102 | 2:c4a43cc93ca8 | 82 | px.SetI(x, j); |
| radmir102 | 2:c4a43cc93ca8 | 83 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 84 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 85 | } |
| radmir102 | 2:c4a43cc93ca8 | 86 | } |
| radmir102 | 2:c4a43cc93ca8 | 87 | |
| radmir102 | 2:c4a43cc93ca8 | 88 | // цикл плавного прохода по диагонали |
| radmir102 | 2:c4a43cc93ca8 | 89 | /*while(true){ |
| radmir102 | 2:c4a43cc93ca8 | 90 | for (int x = 0; x<=20; x+=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 91 | for(int i = 0; i<30; i++){ |
| radmir102 | 2:c4a43cc93ca8 | 92 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 93 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 94 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 95 | } |
| radmir102 | 2:c4a43cc93ca8 | 96 | } |
| radmir102 | 2:c4a43cc93ca8 | 97 | |
| radmir102 | 2:c4a43cc93ca8 | 98 | for (int x = 20; x>=0; x-=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 99 | for(int i = 30; i>=0; i--){ |
| radmir102 | 2:c4a43cc93ca8 | 100 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 101 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 102 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 103 | } |
| radmir102 | 2:c4a43cc93ca8 | 104 | }}*/ |
| radmir102 | 2:c4a43cc93ca8 | 105 | |
| radmir102 | 2:c4a43cc93ca8 | 106 | // Цикл плавного крестика |
| radmir102 | 2:c4a43cc93ca8 | 107 | /* |
| radmir102 | 2:c4a43cc93ca8 | 108 | while(true){ |
| radmir102 | 2:c4a43cc93ca8 | 109 | for (int x = 0; x<=20; x+=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 110 | for(int i = 0; i<30; i++){ |
| radmir102 | 2:c4a43cc93ca8 | 111 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 112 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 113 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 114 | } |
| radmir102 | 2:c4a43cc93ca8 | 115 | } |
| radmir102 | 2:c4a43cc93ca8 | 116 | for (int x = 3; x<=12; x+=3 ){ |
| radmir102 | 2:c4a43cc93ca8 | 117 | for(int i = 0; i<30; i++){ |
| radmir102 | 2:c4a43cc93ca8 | 118 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 119 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 120 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 121 | } |
| radmir102 | 2:c4a43cc93ca8 | 122 | } |
| radmir102 | 2:c4a43cc93ca8 | 123 | for (int x = 12; x>=3; x-=3 ){ |
| radmir102 | 2:c4a43cc93ca8 | 124 | for(int i = 30; i>=0; i--){ |
| radmir102 | 2:c4a43cc93ca8 | 125 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 126 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 127 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 128 | } |
| radmir102 | 2:c4a43cc93ca8 | 129 | } |
| radmir102 | 2:c4a43cc93ca8 | 130 | |
| radmir102 | 2:c4a43cc93ca8 | 131 | for (int x = 0; x<=20; x-=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 132 | for(int i = 30; i>=0; i--){ |
| radmir102 | 2:c4a43cc93ca8 | 133 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 134 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 135 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 136 | } |
| radmir102 | 2:c4a43cc93ca8 | 137 | } |
| radmir102 | 2:c4a43cc93ca8 | 138 | } |
| radmir102 | 2:c4a43cc93ca8 | 139 | */ |
| radmir102 | 2:c4a43cc93ca8 | 140 | /* int d = 20; |
| radmir102 | 2:c4a43cc93ca8 | 141 | while(true){ |
| radmir102 | 2:c4a43cc93ca8 | 142 | for (int x = 0; x<=20; x+=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 143 | for(int i = 0; i<30; i++){ |
| radmir102 | 2:c4a43cc93ca8 | 144 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 145 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 146 | px.SetI(d-=2,i); |
| radmir102 | 2:c4a43cc93ca8 | 147 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 148 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 149 | } |
| radmir102 | 2:c4a43cc93ca8 | 150 | } |
| radmir102 | 1:3fa4e131f518 | 151 | |
| radmir102 | 2:c4a43cc93ca8 | 152 | for (int x = 12; x>=3; x-=3 ){ |
| radmir102 | 2:c4a43cc93ca8 | 153 | for(int i = 30; i>=0; i--){ |
| radmir102 | 2:c4a43cc93ca8 | 154 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 155 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 156 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 157 | } |
| radmir102 | 2:c4a43cc93ca8 | 158 | } |
| radmir102 | 2:c4a43cc93ca8 | 159 | |
| radmir102 | 2:c4a43cc93ca8 | 160 | for (int x = 0; x<=20; x-=5 ){ |
| radmir102 | 2:c4a43cc93ca8 | 161 | for(int i = 30; i>=0; i--){ |
| radmir102 | 2:c4a43cc93ca8 | 162 | px.SetI(x,i); |
| radmir102 | 2:c4a43cc93ca8 | 163 | wait(0.01); |
| radmir102 | 2:c4a43cc93ca8 | 164 | ws.write(px.getBuf()); |
| theros | 0:3bb97062a703 | 165 | } |
| radmir102 | 2:c4a43cc93ca8 | 166 | } |
| radmir102 | 2:c4a43cc93ca8 | 167 | } |
| radmir102 | 2:c4a43cc93ca8 | 168 | */ |
| radmir102 | 1:3fa4e131f518 | 169 | |
| radmir102 | 2:c4a43cc93ca8 | 170 | |
| radmir102 | 2:c4a43cc93ca8 | 171 | |
| radmir102 | 2:c4a43cc93ca8 | 172 | |
| radmir102 | 2:c4a43cc93ca8 | 173 | |
| radmir102 | 2:c4a43cc93ca8 | 174 | /* |
| radmir102 | 2:c4a43cc93ca8 | 175 | for (int i = WS2812_BUF; i >= 0; i--) |
| radmir102 | 2:c4a43cc93ca8 | 176 | { |
| radmir102 | 2:c4a43cc93ca8 | 177 | ws.write(px.getBuf()); |
| radmir102 | 2:c4a43cc93ca8 | 178 | }*/ |
| radmir102 | 1:3fa4e131f518 | 179 | |
| radmir102 | 1:3fa4e131f518 | 180 | |
| radmir102 | 1:3fa4e131f518 | 181 | |
| theros | 0:3bb97062a703 | 182 | } |