|
|
最近正在研究红外遥控的部分,想实现一个红外遥控播放歌曲和灯光
可遥控。。红外获取都没有问题,单纯点亮一个LED也可以,但就是RGB LED就行,只要一亮,就再收不到红外的信号了,初步我怀疑是因为程序循环的问题,但又想不出其它一直让RGB LED亮的方式,所以请教大神们如何解决
以下是代码:
- #include <IRremote.h>
- int RECV_PIN = 11;//定义红外接收器的引脚为11
- int LED = 12;//LED
- //int ledPin = 7; // RGB LED is connected to digital pin 13
- int redPin = 8; // R petal on RGB LED module connected to digital pin 11
- int greenPin = 9; // G petal on RGB LED module connected to digital pin 9
- int bluePin = 10; // B petal on RGB LED module connected to digital pin 10
- IRrecv irrecv(RECV_PIN); // 设置RECV_PIN定义的端口为红外信号接收端口
- decode_results results; // 定义results变量为红外结果存放位置
- void setup()
- {
- Serial.begin(9600); // 开启串口,波特率为9600
- pinMode(LED,OUTPUT);
- // pinMode(ledPin, OUTPUT); // sets the ledPin to be an output
- pinMode(redPin, OUTPUT); // sets the redPin to be an output
- pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
- pinMode(bluePin, OUTPUT); // sets the bluePin to be an output
- irrecv.enableIRIn(); // 启动红外解码
- }
- void loop()
- {
- if (irrecv.decode(&results)) { // 解码成功,把数据放入results变量中
- // 把数据输入到串口
- // Serial.print(results.value, HEX); // 显示红外编码
- // Serial.println(results.bits); // 显示红外编码位数
- if(results.value==0xFFA25D){
- Serial.println("the power key is click...");
- if(digitalRead(LED)==HIGH){
- digitalWrite(LED,LOW);
- setColor(255, 255, 255); // Turn off
- }
- else{
- digitalWrite(LED,HIGH);
- TurnOnRGBLED();
- }
- }
- else if(results.value==0xFFE21D){
- Serial.println("the menu key is click...");
- }
- irrecv.resume(); // 继续等待接收下一组信号
- }
- delay(600); //延时600毫秒,做一个简单的消抖
- }
- void TurnOnRGBLED(){
- setColor(255, 0, 0); // 红色
- delay(1000);
- setColor(0, 255, 0); // 绿色
- delay(1000);
- setColor(0, 0, 255); // 蓝色
- delay(1000);
- setColor(255, 255, 0); // 黄色
- delay(1000);
- setColor(80, 0, 80); // 紫色
- delay(1000);
- setColor(0, 255, 255); // 浅绿色
- delay(1000);
- if(digitalRead(LED)==HIGH){
- TurnOnRGBLED();
- }
- }
- void setColor (int red, int green, int blue) // the color generating function
- {
- analogWrite(redPin, 255-red);
- analogWrite(bluePin, 255-blue);
- analogWrite(greenPin, 255-green);
- }
复制代码 |
|