【雕爷学编程】Arduino动手做(86)---4*4位 WS2812 全彩模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验八十六:WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板模块

WS2812B
是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。

主要特点

● 智能反接保护,电源反接不会损坏IC。

● IC控制电路与LED点光源公用一个电源。

● 控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。

● 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。

● 内置上电复位和掉电复位电路。

● 每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。

● 串行级联接口,能通过一根信号线完成数据的接收与解码。

● 任意两点传传输距离在不超过5米时无需增加任何电路。

● 当刷新速率30帧/秒时,级联数不小于1024点。

● 数据发送速度可达800Kbps。

● 光的颜色高度一致,性价比高。

 

 WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板模块

5050高亮LED,内置控制芯片,仅需1个IO口即可控制多个LED

芯片内置整形电路,信号畸变不会累计,稳定显示

三基色256级亮度调剂,16万色真彩显示效果,扫描频率不低于400Hz/S

串行连级接口,能通过一根信号线完成数据的接收与解码

刷新速率30帧/秒时,低速连级模式连级数不小于512点

数据收发速度最高可达800Kbps

高亮LED,光色亮度一致性高

两端有l联级接口,可以直接插接

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板

项目一,点亮矩阵LED模块,循环快闪绿色光

实验开源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
 
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 
实验八十九: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板
 
项目一,点亮矩阵LED模块,循环快闪绿色光
 
*/
 
 
 
#include <Adafruit_NeoPixel.h>
 
#define PIN 7
 
#define MAX_LED 16
 
#define ADD true
 
#define SUB false
 
int val = 0;
 
boolean stat = ADD;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );
 
 
 
void setup(){
 
  strip.begin();       
 
  strip.show();       
 
}
 
 
 
void loop(){
 
  uint8_t i,a=0;                         
 
  uint32_t color = strip.Color(255, 100, 0);   
 
  while(a<17)  {
 
    for(i=0;i<16;i++) {
 
      if(i==a) strip.setPixelColor(i, color);   
 
      else strip.setPixelColor(i, 0);       
 
    }
 
    strip.show();                     
 
    delay(20);                       
 
    a++;                           
 
  }
 
}

  实验场景图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
 
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 
实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板
 
项目二,依次点亮不同色彩灯
 
*/
 
 
 
#include <FastLED.h>
 
#define LED_PIN    7
 
#define NUM_LEDS  16
 
CRGB leds[NUM_LEDS];
 
 
 
void setup() {
 
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
 
}
 
 
 
void loop() {
 
  leds[0] = CRGB(255, 0, 0);
 
  FastLED.show();
 
  delay(500); 
 
  leds[1] = CRGB(0, 255, 0);
 
  FastLED.show();
 
  delay(500);
 
  leds[2] = CRGB(0, 0, 255);
 
  FastLED.show();
 
  delay(500);
 
  leds[3] = CRGB(150, 0, 255);
 
  FastLED.show();
 
  delay(500);
 
  leds[4] = CRGB(255, 200, 20);
 
  FastLED.show();
 
  delay(500);
 
  leds[5] = CRGB(85, 60, 180);
 
  FastLED.show();
 
  delay(500);
 
  leds[6] = CRGB(150, 255, 20);
 
  FastLED.show();
 
  delay(500);
 
  leds[7] = CRGB(0, 50, 255);
 
  FastLED.show();
 
  delay(500);
 
  leds[8] = CRGB(255, 255, 0);
 
  FastLED.show();
 
  delay(500); 
 
  leds[9] = CRGB(20, 25, 255);
 
  FastLED.show();
 
  delay(500);
 
  leds[10] = CRGB(255, 0, 20);
 
  FastLED.show();
 
  delay(500);
 
  leds[11] = CRGB(50, 0, 55);
 
  FastLED.show();
 
  delay(500);
 
  leds[12] = CRGB(55, 200, 20);
 
  FastLED.show();
 
  delay(500);
 
  leds[13] = CRGB(85, 160, 180);
 
  FastLED.show();
 
  delay(500);
 
  leds[14] = CRGB(20, 255, 0);
 
  FastLED.show();
 
  delay(500);
 
  leds[15] = CRGB(150, 150, 60);
 
  FastLED.show();
 
  delay(500);
 
}

  实验场景图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 
实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板
 
项目之三,简单渐变彩虹色
 
*/
 
 
 
#include <Adafruit_NeoPixel.h>
 
#ifdef __AVR__
 
#include <avr/power.h>
 
#endif
 
#define PIN        7
 
#define NUMPIXELS    16
 
float  RDE1=0;
 
float  GRE1=0;
 
float  BLE1=0;
 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
 
int delayval = 500;
 
 
 
void setup() {
 
#if defined (__AVR_ATtiny85__)
 
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
 
#endif
 
  pixels.begin();
 
}
 
 
 
void loop() {
 
  GRE1=0;
 
for(int o=0;o<255;o++){
 
  RDE1=255;
 
  GRE1=GRE1+1;
 
  BLE1=0;
 
  for(int l=0;l<NUMPIXELS;l++){
 
  pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1));
 
  pixels.show();
 
  }
 
  delay(20);
 
}
 
  RDE1=255;
 
for(int p=0;p<255;p++){
 
  RDE1=RDE1-1;
 
  GRE1=255;
 
  BLE1=0;
 
  for(int l=0;l<NUMPIXELS;l++){
 
  pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1));
 
  pixels.show();
 
  }
 
  delay(20);
 
}
 
BLE1=0;
 
for(int k=0;k<255;k++){
 
  RDE1=0;
 
  GRE1=255;
 
  BLE1=BLE1+1;
 
  for(int l=0;l<NUMPIXELS;l++){
 
  pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1));
 
  pixels.show(); }
 
  delay(20);
 
}
 
GRE1=255;
 
for(int k=0;k<255;k++){
 
  RDE1=0;
 
  GRE1=GRE1-1;
 
  BLE1=255;
 
  for(int l=0;l<NUMPIXELS;l++){
 
  pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1));
 
  pixels.show();
 
  }
 
  delay(20);
 
}
 
RDE1=0;
 
for(int h=0;h<150;h++){
 
  RDE1=RDE1+1;
 
  GRE1=0;
 
  BLE1=255;
 
  for(int l=0;l<NUMPIXELS;l++){
 
  pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1));
 
  pixels.show();
 
  }
 
  delay(20);
 
}
 
}

  实验开源仿真编程(Linkboy V4.5)

实验开源图形编程(Mind+、Mixly、编玩边学)

 

posted @   行者花雕  阅读(686)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示