![]() |
發布時間: 2018-6-17 13:19
正文摘要:此篇用arduino軟件模擬發出38K的載波信號配合紅外發射頭,發出帶有載波信號的38K紅外光,使arduino變成紅外遙控器,配合紅外接收就用此可以遙控各家電。 例程1:紅外發射模塊(取締紅外遙 ... |
例程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; } } |