ws2812B8*32位的灯板,arduino控制led灯的亮度上怎么实现用RGB转换HSV颜色模型的方式改变亮度?

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百九十九:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 可编程硬屏模块知识点:WS2812B主要特点智能反接保护,电源反接不会损坏IC。IC控制电路与LED点光源公用一个电源。控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。内置上电复位和掉电复位电路。每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。串行级联接口,能通过一根信号线完成数据的接收与解码。任意两点传传输距离在不超过5米时无需增加任何电路。当刷新速率30帧/秒时,级联数不小于1024点。数据发送速度可达800Kbps。光的颜色高度一致,性价比高。主要应用领域LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯。WS2812B灯屏电原理参考图实验涉及到的几个WS2812B相关库安装FastLED库,工具—管理库—搜索FastLED—安装安装NeoPixel库,工具—管理库—搜索NeoPixel—安装安装Adafruit_NeoPixel库,下载https://github.com/adafruit/Adafruit_NeoPixel【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块项目程序十八:应用Adafruit_NeoPixel库的入门极简程序Arduino实验开源代码/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
项目程序十八:应用Adafruit_NeoPixel库的入门极简程序
*/
#include <Adafruit_NeoPixel.h>
#define PIN
6 //接脚
#define NUMPIXELS 256 //数量
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 100 //延时
void setup() {
pixels.setBrightness(22);//亮度
pixels.begin();//启动
}
void loop() {
pixels.clear();
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(50, 250, 0));
pixels.show();
delay(2);
}
}
Arduino实验场景图【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块项目程序十九:FHT音乐反应256位动态频谱灯Arduino实验开源代码/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
项目程序十九:FHT音乐反应256位动态频谱灯
*/
#include "FastLED.h"
#define OCTAVE 1 //
// Group buckets into octaves
(use the log output function LOG_OUT 1)
#define OCT_NORM 0 // Don't normalise octave intensities by number of bins
#define FHT_N 256 // set to 256 point fht
#include <FHT.h> // include the library
//int noise[] = {204,188,68,73,150,98,88,68}; // noise level determined by playing pink noise and seeing levels [trial and error]{204,188,68,73,150,98,88,68}
// int noise[] = {204,190,108,85,65,65,55,60}; // noise for mega adk
int noise[] = {204, 195, 100, 90, 85, 80, 75, 75}; // noise for NANO
//int noise[] = {204,198,100,85,85,80,80,80};
float noise_fact[] = {15, 7, 1.5, 1, 1.2, 1.4, 1.7, 3}; // noise level determined by playing pink noise and seeing levels [trial and error]{204,188,68,73,150,98,88,68}
float noise_fact_adj[] = {15, 7, 1.5, 1, 1.2, 1.4, 1.7, 3}; // noise level determined by playing pink noise and seeing levels [trial and error]{204,188,68,73,150,98,88,68}
#define LED_PIN
6
#define LED_TYPE
WS2812
#define COLOR_ORDER GRB
// Params for width and height
const uint8_t kMatrixWidth = 8;
const uint8_t kMatrixHeight = 32;//----------was 27
//#define NUM_LEDS (kMatrixWidth * kMatrixHeight)
#define NUM_LEDS
256
CRGB leds[NUM_LEDS];
int counter2 = 0;
void setup() {
Serial.begin(9600);
delay(1000);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness (133);
fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
// TIMSK0 = 0; // turn off timer0 for lower jitter
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
}
void loop() {
int prev_j[8];
int beat = 0;
int prev_oct_j;
int counter = 0;
int prev_beat = 0;
int led_index = 0;
int saturation = 0;
int saturation_prev = 0;
int brightness = 0;
int brightness_prev = 0;
while (1) { // reduces jitter
cli();
// UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < FHT_N ; i++) { // save 256 samples
while (!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8)
m; // form into an int
k -= 0x0200; // form into a signed int
k <<= 6; // form into a 16b signed int
fht_input[i] = k; // put real data into bins
}
fht_window(); // window the data for better frequency response
fht_reorder(); // reorder the data before doing the fht
fht_run(); // process the data in the fht
fht_mag_octave(); // take the output of the fht
fht_mag_log()
// every 50th loop, adjust the volume accourding to the value on A2 (Pot)
if (counter >= 50) {
ADMUX = 0x40
(1 & 0x07); // set admux to look at Analogpin A1 - Master Volume
while (!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
delay(10);
while (!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8)
m; // form into an int
float master_volume = (k + 0.1) / 1000 + .75; // so the valu will be between ~0.5 and 1.---------------------+.75 was .5
Serial.println (master_volume);
for (int i = 1; i < 8; i++) {
noise_fact_adj[i] = noise_fact[i] * master_volume;
}
ADMUX = 0x40
(0 & 0x07); // set admux back to look at A0 analog pin (to read the microphone input
counter = 0;
}
sei();
counter++;
// End of Fourier Transform code - output is stored in fht_oct_out[i].
// i=0-7 frequency (octave) bins (don't use 0 or 1), fht_oct_out[1]= amplitude of frequency for bin 1
// for loop a) removes background noise average and takes absolute value b) low / high pass filter as still very noisy
// c) maps amplitude of octave to a colour between blue and red d) sets pixel colour to amplitude of each frequency (octave)
for (int i = 1; i < 8; i++) {
// goes through each octave. skip the first 1, which is not useful
int j;
j = (fht_oct_out[i] - noise[i]); // take the pink noise average level out, take the asbolute value to avoid negative numbers
if (j < 10) {
j = 0;
}
j = j * noise_fact_adj[i];
if (j < 10) {
j = 0;
}
else {
j = j * noise_fact_adj[i];
if (j > 180) {
if (i >= 7) {
beat += 2;
}
else {
beat += 1;
}
}
j = j / 30;
j = j * 30; // (force it to more discrete values)
}
prev_j[i] = j;
//
Serial.print(j);
//
Serial.print(" ");
// this fills in 11 LED's with interpolated values between each of the 8 OCT values
if (i >= 2) {
led_index = 2 * i - 3;
prev_oct_j = (j + prev_j[i - 1]) / 2;
saturation = constrain(j + 50, 0, 255); //-----------50 was 30
saturation_prev = constrain(prev_oct_j + 50, 0, 255);
brightness = constrain(j, 0, 255);
brightness_prev = constrain(prev_oct_j, 0, 255);
if (brightness == 255) {
saturation = 50;
brightness = 200;
}
if (brightness_prev == 255) {
saturation_prev = 50;
brightness_prev = 200;
}
for (uint8_t y = 0; y < kMatrixHeight; y++) {
leds[XY(led_index - 1, y)] = CHSV(j + y * 30, saturation, brightness);
if (i > 2) {
prev_oct_j = (j + prev_j[i - 1]) / 2;
leds[ XY(led_index - 2, y)] = CHSV(prev_oct_j + y * 30, saturation_prev, brightness_prev);
}
}
}
}
if (beat >= 7) {
fill_solid(leds, NUM_LEDS, CRGB::Gray);
FastLED.setBrightness(200);
}
else {
if (prev_beat != beat) {
FastLED.setBrightness(40 + beat * beat * 5);
prev_beat = beat;
}
}
FastLED.show();
if (beat) {
counter2 += ((beat + 4) / 2 - 2);
if (counter2 < 0) {
counter2 = 1000;
}
if (beat > 3 && beat < 7) {
FastLED.delay (20);
}
beat = 0;
}
// Serial.println();
}
}
// Param for different pixel layouts
const bool
kMatrixSerpentineLayout = false;
// Set 'kMatrixSerpentineLayout' to false if your pixels are
// laid out all running the same way, like this:
// Set 'kMatrixSerpentineLayout' to true if your pixels are
// laid out back-and-forth, like this:
uint16_t XY( uint8_t x, uint8_t y)
{
uint16_t i;
if ( kMatrixSerpentineLayout == false) {
i = (y * kMatrixWidth) + x;
}
if ( kMatrixSerpentineLayout == true) {
if ( y & 0x01) {
// Odd rows run backwards
uint8_t reverseX = (kMatrixWidth - 1) - x;
i = (y * kMatrixWidth) + reverseX;
} else {
// Even rows run forwards
i = (y * kMatrixWidth) + x;
}
}
i = (i + counter2) % NUM_LEDS;
return i;
}
Arduino实验场景图实验的视频记录优酷:https://v.youku.com/v_show/id_XNTkxMjYwODI2NA==.html?spm=a2hcb.playlsit.page.1B站:https://www.bilibili.com/video/BV1FG411j7Vr/?vd_source=98c6b1fc23b2787403d97f8d3cc0b7e5}
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百:WS2812B幻彩LED灯带 5V全彩灯条5050灯珠内置IC炫彩 单点单控软灯条模块知识点:WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。主要特点1、智能反接保护,电源反接不会损坏IC。2、IC控制电路与LED点光源公用一个电源。3、控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。4、内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。5、内置上电复位和掉电复位电路。6、每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。7、串行级联接口,能通过一根信号线完成数据的接收与解码。8、任意两点传传输距离在不超过5米时无需增加任何电路。9、当刷新速率30帧/秒时,级联数不小于1024点。10、数据发送速度可达800Kbps。11、光的颜色高度一致,性价比高。应用领域具有低电压驱动,环保节能,亮度高,散射角度大,一致性好,超低功率,超长寿命等优点。将控制电路集成于LED上面,电路变得更加简单,体积小,安装更加简便。主要应用领域,LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯等。Arduino实验接线示意图测试环境中可以直接使用Arduino的5V引脚直接供电,如果灯带长度过长,则需要外接电源。下为实验接线示意图。实验提示1、可以在电源到地之间连接一个电容在 100uF 到 1000uF 之间的电容器,以平滑电源。2、在 Arduino 数字输出引脚和条形数据输入引脚之间添加一个 220 或 470 Ohm 电阻器,以减少该线路上的噪声。3、使arduino,电源和条带之间的电线尽可能短,以最大程度地减少电压损失。4、如果您的灯条损坏且无法正常工作,请检查第一个 LED 是否损坏。如果是这样,剪掉它,重新焊接头针,它应该会再次工作。5、WS2812 需要 5v 电源,每个 LED 在其全亮度下需要大约 60mA 电流。如果您的 LED 灯条有 30 个 LED,您需要 60mA x 30 = 1800 mA 或 1.8 Amp 电流。因此,您必须使用额定电流为 1.8 安培或更高的 5v 电源。【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十六:WS2812B幻彩LED灯带 5V全彩灯条5050灯珠内置IC炫彩单点单控软灯条模块实验程序九:循环三色流水彩灯*Arduino实验开源代码/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十六:WS2812B幻彩LED灯带 5V全彩灯条5050灯珠内置IC炫彩单点单控软灯条模块
实验程序九:循环三色流水彩灯
*/
#include <FastLED.h>
#define NUM_LEDS 24
#define DATA_PIN 6
#define COLOR_ORDER GRB
#define LED_TYPE
WS2812B
#define POT A0
CRGB leds[NUM_LEDS];
int onePos = 2;
int twoPos = 2;
int shePos = 2;
byte oneDir = 0;
byte twoDir = 0;
byte sheDir = 0;
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
}
void loop() {
if (analogRead(POT) > NUM_LEDS) {
onePos = map(analogRead(POT), 0, 524, 0, NUM_LEDS);
}
leds[shePos] = CRGB(255, 0, 0);
leds[max(shePos - 1, 0)] = CRGB(255, 0, 0);
leds[min(shePos + 1, NUM_LEDS - 1)] = CRGB(255, 0, 0);
leds[onePos] = CRGB(0, 255, 0);
leds[max(onePos - 1, 0)] = CRGB(0, 255, 0);
leds[min(onePos + 1, NUM_LEDS - 1)] = CRGB(0, 255, 0);
leds[twoPos] = CRGB(0, 0, 255);
leds[max(twoPos - 1, 0)] = CRGB(0, 0, 255);
leds[min(twoPos + 1, NUM_LEDS - 1)] = CRGB(0, 0, 255);
FastLED.show();
delay(150);
leds[shePos] = CRGB(0, 0, 0);
leds[max(shePos - 1, 0)] = CRGB(0, 0, 0);
leds[min(shePos + 1, NUM_LEDS - 1)] = CRGB(0, 0, 0);
leds[onePos] = CRGB(0, 0, 0);
leds[max(onePos - 1, 0)] = CRGB(0, 0, 0);
leds[min(onePos + 1, NUM_LEDS - 1)] = CRGB(0, 0, 0);
leds[twoPos] = CRGB(0, 0, 0);
leds[max(twoPos - 1, 0)] = CRGB(0, 0, 0);
leds[min(twoPos + 1, NUM_LEDS - 1)] = CRGB(0, 0, 0);
FastLED.show();
if (oneDir == 0) {
onePos += 3;
if (onePos >= NUM_LEDS) {
onePos = NUM_LEDS;
oneDir = 1;
}
}
else {
if (oneDir == 1) {
onePos -= 2;
if (onePos <= 0) {
onePos = 0;
oneDir = 0;
}
}
}
if (sheDir == 0) {
shePos += 3;
if (shePos >= NUM_LEDS) {
shePos = NUM_LEDS;
sheDir = 1;
}
}
else {
if (sheDir == 1) {
shePos -= 2;
if (shePos <= 0) {
shePos = 0;
sheDir = 0;
}
}
}
if (twoDir == 0) {
twoPos += 2;
if (twoPos >= NUM_LEDS) {
twoPos = NUM_LEDS;
twoDir = 1;
}
}
else {
if (twoDir == 1) {
twoPos -= 2;
if (twoPos <= 0) {
twoPos = 0;
twoDir = 0;
}
}
}
}
Arduino实验场景图【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十六:WS2812B幻彩LED灯带 5V全彩灯条5050灯珠内置IC炫彩单点单控软灯条模块实验程序十:四色流光彩虹灯带实验开源图形编程(Mind+、编玩边学)Arduino实验场景图【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十六:WS2812B幻彩LED灯带 5V全彩灯条5050灯珠内置IC炫彩单点单控软灯条模块实验程序十一:移动四色流水彩虹灯实验开源图形编程(Mind+、编玩边学)Arduino实验场景图}
产品介绍WS2812B调色灯八颗模块由八个贴片全彩LED制成,通过R、G、B三个引脚的PWM电压输入可以调节三种基色(红、绿、蓝)的强度,从而实现全彩的混色效果,用Arduino对模块的控制可实现酷炫的灯光效果。主要应用领域,LED全彩发光字灯串,LED全彩模组,LED全彩软灯条、硬灯条,LED护栏管,LED点光源,LED像素屏。LED异形屏,各种电子产品,电器设备跑马灯等。产品参数尺寸规格引脚说明功能测试8颗灯珠时隔一秒,一颗颗亮起接线图Arduino UNO
<------>
WS2812B调色灯8颗3V3/5V
<------>
VG
<------>
GA0
<------>
D编程支持支持Mixly(米思齐)支持mind+基础案例灯带随声音传感器律动,检测到音量越高,灯带亮起的灯珠越多,同理音量越低,灯带亮起的灯珠越少。Arduino UNO
<------>
声音传感器3V3/5V
<------>
V
G
<------>
G
A3
<------>
A Arduino UNO
<------>
WS2812B调色灯8颗3V3/5V
<------>
VG
<------>
G5
<------>
D编程支持支持Mixly(米思齐)支持mind+声音律动装置发布于 2022-04-26 14:01}

我要回帖

更多关于 arduino控制led灯的亮度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信