ws2812b效果研究之八 pride2015

2024-08-31 21:36

本文主要是介绍ws2812b效果研究之八 pride2015,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个代码实现了一个名为"Pride2015"的LED动画效果,主要是通过FastLED库生成不断变化的彩虹效果

/// @file    Pride2015.ino
/// @brief   Animated, ever-changing rainbows.
/// @example Pride2015.ino#include "FastLED.h"// Pride2015
// Animated, ever-changing rainbows.
// by Mark Kriegsman#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif#define DATA_PIN    2
//#define CLK_PIN   4
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS    100
#define BRIGHTNESS  255CRGB leds[NUM_LEDS];void setup() {delay(3000); // 3 second delay for recovery// tell FastLED about the LED strip configurationFastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip).setDither(BRIGHTNESS < 255);// set master brightness controlFastLED.setBrightness(BRIGHTNESS);
}void loop()
{pride();FastLED.show();  
}// This function draws rainbows with an ever-changing,
// widely-varying set of parameters.
void pride() 
{static uint16_t sPseudotime = 0;static uint16_t sLastMillis = 0;static uint16_t sHue16 = 0;uint8_t sat8 = beatsin88( 87, 220, 250);uint8_t brightdepth = beatsin88( 341, 96, 224);uint16_t brightnessthetainc16 = beatsin88( 203, (25 * 256), (40 * 256));uint8_t msmultiplier = beatsin88(147, 23, 60);uint16_t hue16 = sHue16;//gHue * 256;uint16_t hueinc16 = beatsin88(113, 1, 3000);uint16_t ms = millis();uint16_t deltams = ms - sLastMillis ;sLastMillis  = ms;sPseudotime += deltams * msmultiplier;sHue16 += deltams * beatsin88( 400, 5,9);uint16_t brightnesstheta16 = sPseudotime;for( uint16_t i = 0 ; i < NUM_LEDS; i++) {hue16 += hueinc16;uint8_t hue8 = hue16 / 256;brightnesstheta16  += brightnessthetainc16;uint16_t b16 = sin16( brightnesstheta16  ) + 32768;uint16_t bri16 = (uint32_t)((uint32_t)b16 * (uint32_t)b16) / 65536;uint8_t bri8 = (uint32_t)(((uint32_t)bri16) * brightdepth) / 65536;bri8 += (255 - brightdepth);CRGB newcolor = CHSV( hue8, sat8, bri8);uint16_t pixelnumber = i;pixelnumber = (NUM_LEDS-1) - pixelnumber;nblend( leds[pixelnumber], newcolor, 64);}
}

动画逻辑分析

状态变量的初始化和更新

sPseudotime、sLastMillis、sHue16是静态变量,用于存储动画状态,使得每次调用pride函数时,这些变量的值能够保留和更新。
ms = millis():获取当前时间(毫秒)。
deltams = ms - sLastMillis:计算自上次更新以来的时间差。
sPseudotime、sHue16根据时间差deltams进行更新,控制颜色和亮度的变化。

颜色和亮度的动态生成

sat8:饱和度,通过beatsin88函数进行动态调整,使彩虹色饱和度在220到250之间变化。
brightdepth:亮度深度,同样通过beatsin88函数,使亮度深度在96到224之间变化。
brightnessthetainc16:亮度角度增量,用于控制亮度的渐变速度。
hueinc16:颜色渐变的速度,通过beatsin88函数控制,使颜色变化更加丰富。
hue8:将hue16缩小至8位(0-255),用于生成HSV颜色。
像素亮度计算

通过sin16计算brightnesstheta16的正弦值b16,然后计算亮度bri16和bri8,以生成渐变的亮度效果。
newcolor = CHSV(hue8, sat8, bri8):使用HSV颜色模型生成新颜色newcolor。

颜色混合与应用

使用nblend函数将生成的颜色与当前LED颜色进行混合,使得颜色变化更加平滑。
pixelnumber = (NUM_LEDS - 1) - pixelnumber;:这个语句反转了LED的索引,使得彩虹效果从LED阵列的另一端开始。

总结

这个代码生成了一个动态、渐变的彩虹动画效果。通过使用FastLED库的高级功能,如beatsin88、sin16、nblend等函数,代码能够创造出复杂、多变的色彩效果。整体效果是一个不断变化的彩虹,具有丰富的色彩渐变和亮度变化,非常适合用于LED装置中的视觉效果展示。

这篇关于ws2812b效果研究之八 pride2015的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125058

相关文章

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co