极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10605|回复: 4

求救大神~关于RGB LED一直闪烁问题!!

[复制链接]
发表于 2014-4-23 17:37:08 | 显示全部楼层 |阅读模式
最近正在研究红外遥控的部分,想实现一个红外遥控播放歌曲和灯光
可遥控。。红外获取都没有问题,单纯点亮一个LED也可以,但就是RGB LED就行,只要一亮,就再收不到红外的信号了,初步我怀疑是因为程序循环的问题,但又想不出其它一直让RGB LED亮的方式,所以请教大神们如何解决

以下是代码:

  1. #include <IRremote.h>

  2. int RECV_PIN = 11;//定义红外接收器的引脚为11
  3. int LED = 12;//LED
  4. //int ledPin = 7; // RGB LED is connected to digital pin 13
  5. int redPin = 8;  // R petal on RGB LED module connected to digital pin 11
  6. int greenPin = 9;  // G petal on RGB LED module connected to digital pin 9
  7. int bluePin = 10;  // B petal on RGB LED module connected to digital pin 10


  8. IRrecv irrecv(RECV_PIN); // 设置RECV_PIN定义的端口为红外信号接收端口
  9. decode_results results;    // 定义results变量为红外结果存放位置

  10. void setup()
  11. {
  12.   Serial.begin(9600);   // 开启串口,波特率为9600
  13.   pinMode(LED,OUTPUT);
  14.   //  pinMode(ledPin, OUTPUT); // sets the ledPin to be an output
  15.   pinMode(redPin, OUTPUT); // sets the redPin to be an output
  16.   pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
  17.   pinMode(bluePin, OUTPUT); // sets the bluePin to be an output

  18.   irrecv.enableIRIn();   // 启动红外解码
  19. }

  20. void loop()
  21. {
  22.   if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
  23.     // 把数据输入到串口         
  24.     //   Serial.print(results.value, HEX); // 显示红外编码         
  25.     //   Serial.println(results.bits); // 显示红外编码位数
  26.     if(results.value==0xFFA25D){
  27.       Serial.println("the power key is click...");
  28.       if(digitalRead(LED)==HIGH){
  29.         digitalWrite(LED,LOW);
  30.         setColor(255, 255, 255);  // Turn off
  31.       }
  32.       else{
  33.         digitalWrite(LED,HIGH);
  34.         TurnOnRGBLED();
  35.       }
  36.     }
  37.     else if(results.value==0xFFE21D){
  38.       Serial.println("the menu key is click...");
  39.     }
  40.     irrecv.resume();    // 继续等待接收下一组信号
  41.   }  
  42.   delay(600); //延时600毫秒,做一个简单的消抖
  43. }

  44. void TurnOnRGBLED(){
  45.   setColor(255, 0, 0);  // 红色
  46.   delay(1000);
  47.   setColor(0, 255, 0);  // 绿色
  48.   delay(1000);
  49.   setColor(0, 0, 255);  // 蓝色
  50.   delay(1000);
  51.   setColor(255, 255, 0);  // 黄色
  52.   delay(1000);  
  53.   setColor(80, 0, 80);  // 紫色
  54.   delay(1000);
  55.   setColor(0, 255, 255);  // 浅绿色
  56.   delay(1000);
  57.   if(digitalRead(LED)==HIGH){
  58.     TurnOnRGBLED();
  59.   }
  60. }

  61. void setColor (int red, int green, int blue)     // the color generating function  
  62. {   
  63.   analogWrite(redPin, 255-red);   
  64.   analogWrite(bluePin, 255-blue);
  65.   analogWrite(greenPin, 255-green);
  66. }
复制代码
回复

使用道具 举报

发表于 2014-4-23 21:34:51 | 显示全部楼层
按描述分析:
1) 红外获取都没有问题  
2) 纯点亮一个LED也可以
3) RGB LED 只要一亮,就再收不到红外的信号了  

看來可能是 RGB LED 扞擾了紅外接收,可嘗試把 RGB LED遠離紅外接收,又或是做光隔離來確認是否有扞擾的問題。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-23 22:24:09 | 显示全部楼层
eddiewwm 发表于 2014-4-23 21:34
按描述分析:
1) 红外获取都没有问题  
2) 纯点亮一个LED也可以

应该不会是因为光线而导致的接收问题吧,这个还真没试,回头试一下
因为我认为可能是因为无限循环的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-24 13:59:18 | 显示全部楼层
{:soso__3669389859068460655_4:}没有哪位大神能给解决一下吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 11:41:52 | 显示全部楼层
{:soso__3669389859068460655_4:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 20:36 , Processed in 0.038069 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表