红外遥控实验
红外遥控主要由红外发射和红外接收两部分组成。红外发射和接收的信号其实都是一连串的二进制脉冲码,高低电平按照一定的时间规律变换来传递相应的信息。为了使其在无线传输过程中免受其他信号的干扰,通常都将信号调制在特定的载波频率上(38K红外载波信号),通过红外发射二极管发射出去,而红外接收端则要将信号进行解调处理,还原成二进制脉冲码进行处理。
红外接收头有三个引脚,从左到右依次为VOUT、GND、VCC。红外遥控器发射的38K红外载波信号由遥控器里的编码芯片对其进行编码。当按下遥控器按键时,遥控器发出红外载波信号,红外接收器接收到信号,程序对载波信号进行解码,通过数据码的不同来判断按下的是哪个键。
 
接线
 
代码
| 12
 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模拟输出,以便获得所需颜色

代码
| 12
 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 |