arduino/Mixly WS2812点阵屏,FASTLED库学习

前言

关于WS2812的控制,主要有二个库,一个是FastLED库,另一个是Adafruit_NeoPixel库,Adafruit_NeoPixel这个库实测能控制的最大数量是600颗,超过630颗就不能控制了,这个库的优点是需要的内存小,uno的内存完全可以控制,FastLED这个需要的内存比较大,我是打算控制1024个灯珠,但是uno的内存就完全不够了,换了mega2560才行

 

点亮LED

完整代码

#include "FastLED.h"            // 此示例程序需要使用FastLED库
 
#define NUM_LEDS 1024            // LED灯珠数量
#define DATA_PIN A0              // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序
 
uint8_t max_bright = 120;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高
 
CRGB leds[NUM_LEDS];            // 建立光带leds
 
void setup() { 
  LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带 
  FastLED.setBrightness(max_bright);                            // 设置光带亮度
}
 
void loop() { 
   for (int i = 0; i <= 1023; i = i + (1)) {
    leds[i] = CRGB::Green;          // 设置光带中灯珠颜色为绿色,leds[0]为第一个灯珠,leds[1]为第二个灯珠
  }
  FastLED.show();                // 更新LED色彩
}

效果

 其中颜色的表示有二种

设置颜色方法一

leds[i] = CRGB::Green;

这种是直接设置颜色,CRGB::Green就是绿色,但是绿色的深度这些是没办法调的,比如你要G值125的绿色,那这种办法是不能实现的。

这种办法的颜色值一共有以下几种:由于我的四个8*32的点阵之间有色差,所以这里只用一块8*32的点阵来演示。

CRGB::AliceBlue效果

 CRGB::Amethyst效果

CRGB::Brown效果

 

 其他的就不测试了,总共有以下几种

CRGB::AliceBlue
CRGB::Amethyst
CRGB::AntiqueWhite
CRGB::Aqua
CRGB::Aquamarine
CRGB::Azure
CRGB::Beige
CRGB::Bisque
CRGB::Black
CRGB::BlanchedAlmond
CRGB::Blue
CRGB::BlueViolet
CRGB::Brown
CRGB::BurlyWood
CRGB::CadetBlue
CRGB::Chartreuse
CRGB::Chocolate
CRGB::Coral
CRGB::CornflowerBlue
CRGB::Cornsilk
CRGB::Crimson
CRGB::Cyan
CRGB::DarkBlue
CRGB::DarkCyan
CRGB::DarkGoldenrod
CRGB::DarkGray
CRGB::DarkGreen
CRGB::DarkKhaki
CRGB::DarkMagenta
CRGB::DarkOliveGreen
CRGB::DarkOrange
CRGB::DarkOrchid
CRGB::DarkRed
CRGB::DarkSalmon
CRGB::DarkSeaGreen
CRGB::DarkSlateBlue
CRGB::DarkSlateGray
CRGB::DarkTurquoise
CRGB::DarkViolet
CRGB::DeepPink
CRGB::DeepSkyBlue
CRGB::DimGray
CRGB::DodgerBlue
CRGB::FireBrick
CRGB::FloralWhite
CRGB::ForestGreen
CRGB::Fuchsia
CRGB::Gainsboro
CRGB::GhostWhite
CRGB::Gold
CRGB::Goldenrod
CRGB::Gray
CRGB::Green
CRGB::GreenYellow
CRGB::Honeydew
CRGB::HotPink
CRGB::IndianRed
CRGB::Indigo
CRGB::Ivory
CRGB::Khaki
CRGB::Lavender
CRGB::LavenderBlush
CRGB::LawnGreen
CRGB::LemonChiffon
CRGB::LightBlue
CRGB::LightCoral
CRGB::LightCyan
CRGB::LightGoldenrodYellow
CRGB::LightGreen
CRGB::LightGrey
CRGB::LightPink
CRGB::LightSalmon
CRGB::LightSeaGreen
CRGB::LightSkyBlue
CRGB::LightSlateGray
CRGB::LightSteelBlue
CRGB::LightYellow
CRGB::Lime
CRGB::LimeGreen
CRGB::Linen
CRGB::Magenta
CRGB::Maroon
CRGB::MediumAquamarine
CRGB::MediumBlue
CRGB::MediumOrchid
CRGB::MediumPurple
CRGB::MediumSeaGreen
CRGB::MediumSlateBlue
CRGB::MediumSpringGreen
CRGB::MediumTurquoise
CRGB::MediumVioletRed
CRGB::MidnightBlue
CRGB::MintCream
CRGB::MistyRose
CRGB::Moccasin
CRGB::NavajoWhite
CRGB::Navy
CRGB::OldLace
CRGB::Olive
CRGB::OliveDrab
CRGB::Orange
CRGB::OrangeRed
CRGB::Orchid
CRGB::PaleGoldenrod
CRGB::PaleGreen
CRGB::PaleTurquoise
CRGB::PaleVioletRed
CRGB::PapayaWhip
CRGB::PeachPuff
CRGB::Peru
CRGB::Pink
CRGB::Plaid
CRGB::Plum
CRGB::PowderBlue
CRGB::Purple
CRGB::Red
CRGB::RosyBrown
CRGB::RoyalBlue
CRGB::SaddleBrown
CRGB::Salmon
CRGB::SandyBrown
CRGB::SeaGreen
CRGB::Seashell
CRGB::Sienna
CRGB::Silver
CRGB::SkyBlue
CRGB::SlateBlue
CRGB::SlateGray
CRGB::Snow
CRGB::SpringGreen
CRGB::SteelBlue
CRGB::Tan
CRGB::Teal
CRGB::Thistle
CRGB::Tomato
CRGB::Turquoise
CRGB::Violet
CRGB::Wheat
CRGB::White
CRGB::WhiteSmoke
CRGB::Yellow
CRGB::YellowGreen

设置颜色方法二

leds[i] = CRGB (0,255,0);

这种办法是直接设置RGB值,leds[i] = CRGB (0,255,0);从左到右分别是R值,G值,B值

效果

 fillSolid将光带设置为同一颜色

fill_solid(leds, 30, CRGB::Red)

参数主要有个,第一个是从哪一个灯开始,第二个是往后取多少个灯,第三个是颜色

fill_solid(leds, 30, CRGB::Red)的效果

和for循环的效果类似

fill_solid(leds+5, 30, CRGB::Red);

 fill_solid(leds+5, 30, CRGB::Red);的意思是从第六个灯开始,往后数30个LED,点亮为红色

未完待续!后面会加上显示图片,显示汉字,显示字符,滚动等效果

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Arduino代码段,用于控制ESP32驱动WS2812点阵显示图片。在此之前,您需要安装Adafruit NeoPixel,可以通过Arduino IDE的管理器进行安装。 ```c++ #include <Adafruit_NeoPixel.h> #include <ESP32WiFi.h> #include <WiFiClient.h> #include <WiFiServer.h> #include <WiFiUdp.h> // 定义WS2812点阵相关参数 #define PIN 5 // 驱动WS2812的GPIO引脚 #define NUMPIXELS 64 // 点阵中LED的数量 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); // 定义WiFi网络相关参数 const char* ssid = "your_SSID"; // 替换成您的WiFi网络名称 const char* password = "your_PASSWORD"; // 替换成您的WiFi网络密码 WiFiServer server(80); void setup() { // 初始化WS2812点阵 pixels.begin(); // 连接WiFi网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } server.begin(); Serial.println("WiFi connected"); // 打印ESP32的IP地址 Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { // 监听客户端请求 WiFiClient client = server.available(); if (client) { Serial.println("New client connected"); while (client.connected()) { if (client.available()) { // 读取客户端发送的图片数据 String line = client.readStringUntil('\r'); int img_data[NUMPIXELS]; for (int i = 0; i < NUMPIXELS; i++) { img_data[i] = line.substring(i * 3, i * 3 + 3).toInt(); } // 在WS2812点阵上显示图片 for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, pixels.Color(img_data[i * 3], img_data[i * 3 + 1], img_data[i * 3 + 2])); } pixels.show(); } } client.stop(); Serial.println("Client disconnected"); } } ``` 在此代码中,我们首先定义了WS2812点阵的相关参数,然后初始化点阵。接着,我们连接到WiFi网络,并启动一个Web服务器,监听80端口。当客户端发送请求时,我们读取客户端发送的图片数据,并在WS2812点阵上显示图片。 请注意,此代码仅适用于单色WS2812点阵。如果您使用的是RGB或RGBW点阵,需要根据您的点阵规格进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值