当前位置:首页 > > 21ic电子网
[导读]出品21ic论坛jinglixixi网站:bbs.21ic.comFirebeetle开发板是一款体型小巧、功能丰富的开发板,并可以ArduinoIDE来开发,从而有效地化解编程的复杂性。1.硬件构成:以Firebeetle开发板为核心,在红外接收模块和W2812彩色灯带的配合下...

出品 21ic论坛 jinglixixi
网站:bbs.21ic.com
Firebeetle开发板是一款体型小巧、功能丰富的开发板,并可以Arduino IDE来开发,从而有效地化解编程的复杂性。
1.硬件构成:以Firebeetle开发板为核心,在红外接收模块和W2812彩色灯带的配合下即可完成一个遥控型彩色灯带显示装置。由于W2812彩色灯带是一种单总线型的器件,因此可以级联起来使用,以形成一条长度可以进行延伸的彩色灯带。
至于红外接收模块的模块的使用,则是为了便于进行非接触性的操控。红外接收模块的引脚也非常简单,除了信号输出引脚外,就只是2个电源引脚了。
所用的遥控器则是一款为太阳能充电灯所配置的遥控器,按键不是很多,其主要作用就是对于电源开关及工作模式的切换。
硬件的整体构成如图1所示,其结构框图则如图2所示。
基于Firebeetle开发板的遥控型彩色灯带图1 整体构成
基于Firebeetle开发板的遥控型彩色灯带图2结构框图
根据 NEC 协议的标准,每一帧数据的周期为 110 ms,且逻辑 0 和 逻辑 1的波形如图3所示。其中逻辑 1 对应的两个高电平的时间间隔为 2.25ms,同样地逻辑 0 对应的两个高电平的时间间隔为 1.12ms。
基于Firebeetle开发板的遥控型彩色灯带图3  NEC 协议波形
2.程序设计在引脚的连接方面,其对应关系如下:红外接收模块的OUT---开发板的SCLW2812彩色灯带的DI---开发板的A4
因此对相关的引脚对应如下:int IR_RECEIVE_PIN = 15;#define DATA_PIN SCLint  LED_PIN= D9;int KEY_PIN = D4;所实现的功能为:1)使用开发板上的按键可切换LED灯的亮灭;2)使用遥控器的电源开关键可控制LED灯的亮灭;3)使用遥控器的模式键可进行彩色灯带的色彩变换及演示效果的切换。为了便于后续的程序设计,先进行了遥控器的键值检测,经检测该遥控器的相应键值为:ON键---0xFFA25DOFF键---0xFFE21DMODE1---0xFFE01FMODE2---0xFFA857MODE3---0xFF906F
故该遥控器的键值识别处理程序如下:

if(codeValue==0xFFA25D){Serial.println("ON");F=1;}if(codeValue==0xFFE21D){Serial.println("OFF");F=0;}if(codeValue==0xFFE01F){Serial.println("R");F=2;}if(codeValue==0xFFA857){Serial.println("G");F=3;}if(codeValue==0xFF906F){Serial.println("B");F=4;}}}

其中变量F的作用是标识所要执行的处理功能,所输出的提示信息则是为了便于进行验证,其验证结果如图4所示,说明识别有效。


图4 测试结果


为此,所设计的各模式切换处理程序如下:


if(F==2){for(i=0;i{//灯珠显示红色依次点亮leds[i] = CRGB::Red;FastLED.show();delay(500);}}if(F==3){for(i=0;i{//灯珠显示绿色依次点亮leds[i] = CRGB::Green;FastLED.show();delay(500);}}if(F==4){for(i=0;i{//灯珠显示蓝色依次点亮leds[i] = CRGB::Blue;FastLED.show();delay(500);

其测试效果如图5至图8所示,其演示效果为按指定的色彩从前至后依次递进点亮。当然我们也可以按自己意愿来设计所需的效果。


基于Firebeetle开发板的遥控型彩色灯带


图5 模式1的效果


基于Firebeetle开发板的遥控型彩色灯带


图6模式2的效果


基于Firebeetle开发板的遥控型彩色灯带


图7 模式3的效果


除了前面介绍的遥控方式外,它还支持按键的操控方式,实现两种操控方式的兼容,其执行效果如图8所示。


基于Firebeetle开发板的遥控型彩色灯带


图8 电源键效果


这种与遥控方式兼容的处理程序为:

    if(digitalRead(KEY_PIN)==LOW) F=(F 1)%2;

    if(F==1)  digitalWrite(LED_PIN,HIGH);

    else     digitalWrite(LED_PIN,LOW);


这里由于是按照变量F的值进行判别处理,故达到了2种控制方式的并行不背。

若将上面的条件语句改为:if(digitalRead(KEY_PIN)==LOW) F=(F 1)%5;

则按键与遥控器的作用是等价的,否则只是在控制LED灯时作用相同。


有了前面的这些介绍,再了解下面的完整程序就不困难了。此外,在此框架的基础上若再添加或修改程序,则可适应自己的功能需求,例如以遥控器控制一个MP3语音播放器等。


3.程序内容

该设计的完整程序如下:


#include #define NUM_LEDS 7#define DATA_PIN SCLCRGB leds[NUM_LEDS];#include #if defined(ESP32)int IR_RECEIVE_PIN = 15;int SEND_BUTTON_PIN = 16;#endifint STATUS_PIN = LED_BUILTIN;IRrecv irrecv(IR_RECEIVE_PIN);IRsend irsend;decode_results results;int  LED_PIN = D9;int  KEY_PIN = D4;int  F=0;#if defined(ARDUINO_ARCH_SAMD)#define Serial SerialUSB#endifvoid setup() {pinMode(LED_PIN, OUTPUT);pinMode(KEY_PIN, INPUT_PULLUP);digitalWrite(LED_PIN, HIGH);FastLED.addLeds(leds, NUM_LEDS);Serial.begin(115200);irrecv.enableIRIn(); // Start the receiverpinMode(SEND_BUTTON_PIN, INPUT_PULLUP);pinMode(STATUS_PIN, OUTPUT);Serial.print(F("Ready to receive IR signals at pin "));Serial.println(IR_RECEIVE_PIN);Serial.print(F("Ready to send IR signals at pin "));Serial.println(IR_SEND_PIN);}int codeType = -1;unsigned long codeValue;unsigned int rawCodes[RAW_BUFFER_LENGTH];int codeLen;int toggle = 0;void storeCode(decode_results *results) {codeType = results->decode_type;if (codeType == UNKNOWN) {Serial.println("");} else {if (codeType == NEC) {Serial.print("Received NEC: ");if (results->value == REPEAT) {// Don't record a NEC repeat value as that's useless.//Serial.println("repeat; ignoring.");Serial.println("");return;}}Serial.println(results->value, HEX);codeValue = results->value;codeLen = results->bits;if(codeValue==0xFFA25D){Serial.println("ON");F=1;}if(codeValue==0xFFE21D){Serial.println("OFF");F=0;}if(codeValue==0xFFE01F){Serial.println("R");F=2;}if(codeValue==0xFFA857){Serial.println("G");F=3;}if(codeValue==0xFF906F){Serial.println("B");F=4;}}}void sendCode(int repeat) {}int lastButtonState;void loop() {int i;// If button pressed, send the code.int buttonState = digitalRead(SEND_BUTTON_PIN);if (lastButtonState == LOW
21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭