例程2:arduino模拟SONY遥控器,用arduino串口发送一个字符便可以遥控SONY家电的开关。 /*********红外发射头接arduino的3号数字口**************************/ #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); } void loop() { if (Serial.read() != -1) { for (int i = 0; i < 3; i++) { irsend.sendSony(0xa90, 12); // Sony TV power code delay(100); } } } |
打开串口,随意发送一个数字,红外发射头会发出带编码的38K红外波, 另一方面用一个红外接收头就可以接收到此码,将其解码就会知道遥控器是按的哪个按键。 接收方面,arduino+红外接收模块进行解码 |
#define ADD 0x00 int IR_S = 8; //接arduino 8号引脚 void setup() { pinMode(IR_S, OUTPUT); Serial.begin(9600); // 9600 波特率 } void loop() { uint8_t dat,temp; if ( Serial.available()) { temp = Serial.read();//? IR_Send38KHZ(280,1);//发送9ms的起始码 IR_Send38KHZ(140,0);//发送4.5ms的结果码 IR_Sendcode(ADD);//用户识别码 dat=~ADD; IR_Sendcode(dat);//用户识别码反吗 IR_Sendcode(temp);//操作码 dat=~temp; IR_Sendcode(dat);//操作码反码 IR_Send38KHZ(21,1);//发送结束码 } delay(200); } void IR_Send38KHZ(int x,int y) //产生38KHZ红外脉冲 { for(int i=0;i<x;i++)//15=386US { if(y==1) { digitalWrite(IR_S,1); delayMicroseconds(9); digitalWrite(IR_S,0); delayMicroseconds(9); } else { digitalWrite(IR_S,0); delayMicroseconds(20); } } } void IR_Sendcode(uint8_t x) // { for(int i=0;i<8;i++) { if((x&0x01)==0x01) { IR_Send38KHZ(23,1); IR_Send38KHZ(64,0); } else { IR_Send38KHZ(23,1); IR_Send38KHZ(21,0); } x=x>>1; } } |