红外遥控实验
红外遥控主要由红外发射和红外接收两部分组成。红外发射和接收的信号其实都是一连串的二进制脉冲码,高低电平按照一定的时间规律变换来传递相应的信息。为了使其在无线传输过程中免受其他信号的干扰,通常都将信号调制在特定的载波频率上(38K红外载波信号),通过红外发射二极管发射出去,而红外接收端则要将信号进行解调处理,还原成二进制脉冲码进行处理。
红外接收头有三个引脚,从左到右依次为VOUT、GND、VCC。红外遥控器发射的38K红外载波信号由遥控器里的编码芯片对其进行编码。当按下遥控器按键时,遥控器发出红外载波信号,红外接收器接收到信号,程序对载波信号进行解码,通过数据码的不同来判断按下的是哪个键。
接线
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <IRremote.h> //引入函数库
int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results;
void setup() { pinMode(6,OUTPUT);
Serial.begin(9600); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Enabled IRin"); }
void loop() { if (irrecv.decode(&results)) { Serial.println(results.value);
if(results.value==16738455) { digitalWrite(6,!digitalRead(6));
if(digitalRead(6)==HIGH) Serial.println("LED HIGH");
if(digitalRead(6)==LOW) Serial.println("LED LOW"); }
irrecv.resume(); }
delay(100); }
|
红外遥控控制RGB显示不同颜色
RGB LED灯可以通过混合红色、绿色和蓝色这三种基本颜色来发出不同的颜色。所以它实际上由3个独立的LED组成,红色、绿色和蓝色包装在一个盒子里。这就是为什么它有4个引脚,3种颜色中的每一种都有一种引线,而RGB LED类型则有一种共用阴极或阳极。在本次使用的是共阴极。
使用PWM模拟输出,以便获得所需颜色
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #include <IRremote.h> //引入函数库
int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results;
void setup() { pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT);
Serial.begin(9600); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Enabled IRin"); }
void loop() { if (irrecv.decode(&results)) { Serial.println(results.value);
if(results.value==16738455) { setColor(0, 0, 0); delay(1000); }
if(results.value==16724175) { setColor(255, 0, 0); delay(1000); }
if(results.value==16718055) { setColor(0, 255, 0); delay(1000); }
if(results.value==16753245) { setColor(0, 0, 255); delay(1000); }
if(results.value==16716015) { setColor(255, 255, 255); delay(1000); }
if(results.value==16726215) { setColor(170, 0, 255); delay(1000); }
Serial.println(); irrecv.resume(); } delay(100); }
void setColor(int redValue, int greenValue, int blueValue) { analogWrite(5, redValue); analogWrite(6, greenValue); analogWrite(7, blueValue); }
|
所以现在在loop函数中我们将制作程序,它将每秒改变LED的颜色。 为了在LED获得红光,我们将调用**setColor()**函数,并为redValue参数设置值255,另外两个参数设置0。 我们分别可以得到另外两种基本颜色,绿色和蓝色。 为了获得其他颜色,我们需要混合参数值。 因此,例如,如果将所有3个LED设置为最大亮度,我们将获得白光,如果我们将以下值设置为参数:170 redValue、0 greenValue和255 blueValue,我们将获得紫色光。
脉冲码
使用红外遥控测得遥控器得十进制脉冲码(本人)
符号 |
十进制脉冲码 |
符号 |
十进制脉冲码 |
0 |
16738455 |
关机 |
16753245 |
1 |
16724175 |
Mode |
16736925 |
2 |
16718055 |
静音 |
16769565 |
3 |
16743045 |
暂停 |
16720605 |
4 |
16716015 |
后退 |
16712445 |
5 |
16726215 |
前进 |
16761405 |
6 |
16734885 |
EQ |
16769055 |
7 |
16728765 |
VOL- |
16754775 |
8 |
16730805 |
VOL+ |
16748655 |
9 |
16732845 |
RPT |
16750695 |
(长按) |
4294967295 |
U/SD |
16756815 |