arduion利用红外接收和全彩灯模块制作遥控小夜灯
本次arduino遥控器控制全彩灯珠主要是用到一个名为Adafruit_NeoPixel库和IRremote库,你可以在https://download.csdn.net/download/m0_37738838/10580805下载到这两个库文件及下面提到的源码案例。
#include <Adafruit_NeoPixel.h>//全彩LED库文件
#define PIN 13 //设置全彩LED引脚为13 可自己调整
#define MAX_LED 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );//Adafruit_NeoPixel实例化,通过构造函数初始化
#include <IRremote.h>//红外接收库文件
int PIN_RECV = 2;//红外接收引脚为2
int init_light=100;//初始亮度
int init_color = 0;//初始颜色
IRrecv irrecv(PIN_RECV);//定义IR接收对象
decode_results results;//定义IR接收到的编码结果
uint32_t color_green = strip.Color(255,0,0); //GRB
uint32_t color_red = strip.Color(0,255,0);
uint32_t color_blue = strip.Color(0,0,255);
uint32_t color_yellow = strip.Color(255,255,0);
uint32_t color_white = strip.Color(255,255,255);
uint32_t color[] = {color_red,color_green,color_blue,color_yellow,color_white};
int length = sizeof(color)/sizeof(color[0])-1;//颜色数组长度
void setup() {
Serial.begin(9600);
strip.begin(); //初始化Adafruit_NeoPixel;
irrecv.enableIRIn(); //开启IR接收
Rgb(); //初始颜色亮度
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value,HEX);//16进制输出红外码值
switch(results.value)
{
//up 增加亮度
case 0xFF18E7: RgbLight_add();
break;
//down 降低亮度
case 0xFF4AB5:RgbLight_sub();
break;
//left 上个颜色
case 0xFF10EF:color_add();
break;
//right 下个颜色
case 0xFF5AA5: color_sub();
break;
}
irrecv.resume();
}
}
void Rgb(){ //初始颜色亮度
strip.setPixelColor(0, color[init_color]);
strip.setPixelColor(1, color[init_color]);
strip.setBrightness(init_light);
strip.show();
}
void RgbLight_add(){ //增加亮度
init_light = init_light+50;
Serial.println(init_light);
if(init_light>250){init_light=250;}
strip.setBrightness(init_light);
delay(100);
strip.show();
}
void RgbLight_sub(){ //降低亮度
init_light = init_light-50;
Serial.println(init_light);
if(init_light==0){init_light=50;}//最低亮度
strip.setBrightness(init_light);
delay(100);
strip.show();
}
void color_add(){ //上个颜色
init_color++;
if(init_color>length) init_color=0;
strip.setPixelColor(0, color[init_color]);
strip.setPixelColor(1, color[init_color]);
strip.show();
}
void color_sub(){ //下个颜色
init_color--;
if(init_color<0) init_color=length;
strip.setPixelColor(0, color[init_color]);
strip.setPixelColor(1, color[init_color]);
strip.show();
}
strip对象使用到的函数均可在库文件中查找原型,代码运行前导入库文件,下面链接有介绍
https://jingyan.baidu.com/article/bad08e1eec82f909c8512187.html
本程序编写时是两个全彩LED的集成模块
全彩LED电路图: