天天看點

arduino筆記20:紅外遙控

     紅外LED    紅外接收器   

紅外遙控的通訊協定     用到一個庫:

arduino紅外接收器:   IRrecvDemo

arduino筆記20:紅外遙控

arduino筆記20:紅外遙控

  decode()庫函數用于判斷紅外接收器所接收到的紅外信号是否可以被解析。

  如可以成功解析,則傳回非零數值。并将解析結果存儲于results中。

  如無法成功解析,則傳回零。

  每一次解析完成,都需要調用resume()函數進而讓Arduino開始準備接收下一個紅外

  遙控指令。

/*
 * IRrecvDemo-LED
 * =====================功能說明=====================
 * 示範如何利用Arduino開發闆接收紅外遙控器控制信号,
 * 并利用接受到的信号遙控Arduino開發闆上的紅外LED。
 * Arduino所接收到的紅外遙控器信号内容也将通過序列槽螢幕顯示出來。
 * 
 * 本程式基于Ken Shirriff開發的IRremote庫。如需獲得該庫檔案
 * 可前往以下網址獲得:
 * http://arcfn.com (Ken Shirriff個人部落格)                              
 * http://www.taichi-maker.com/homepage/download/  (太極創客官網)
 * 
 * =====================電路連接配接======================
 *   紅外接收器 1838B OUT 引腳 ---  Arduino Uno 11  引腳 
 *   紅外接收器 1838B VCC 引腳 ---  Arduino Uno +5V 引腳 
 *   紅外接收器 1838B GND 引腳 ---  Arduino Uno GND 引腳 
 *         
 *  如需獲得詳細電路連接配接說明圖,請參閱太極創客網站:
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程式為配合太極創客制作的
 * 《零基礎入門學用ARDUINO教程-智能應用篇》使用
 * 
 */
 
#include <IRremote.h>
#define  RECV_PIN 11
 
IRrecv irrecv(RECV_PIN);   // 紅外遙控初始化
decode_results results;   // 定義一個變量,來儲存接收到的紅外遙控資訊
 
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);     
  Serial.begin(9600);
  Serial.println("Enabling IRin");
  irrecv.enableIRIn();     // 啟動紅外接收
  Serial.println("Enabled IRin");
}
 
void loop() {

  if (irrecv.decode(&results)) {  
    Serial.println(results.value, HEX);  // results.value為紅外遙控信号的具體數值
 
    if(results.value == 0xF7C03F) //如果控制資訊數值為F7C03F
    {          
        Serial.println("Command Received: Turn On LED.");
        digitalWrite(LED_BUILTIN, HIGH); 
    } 
    
    if(results.value == 0xF740BF) //如果控制資訊數值為F740BF
    {          
        Serial.println("Command Received: Turn Off LED.");
        digitalWrite(LED_BUILTIN, LOW); 
    }
    
    irrecv.resume(); // 恢複接收下一個紅外遙控信号
  }
  delay(100);
}           

&   指針,     HEX  十六進制資訊,,

0x    十六進制。

發射紅外遙控信号:

紅外LED方向性

最遠2—3米,,,

配限流電阻。

/*
 * IRsendDemo
 * 
 * =====================功能說明=====================
 * 利用Arduino開發闆發射紅外控制信号
 * 
 * 本程式基于Ken Shirriff開發的IRremote庫。如需獲得該庫檔案
 * 可前往以下網址獲得:
 * http://arcfn.com   (Ken Shirriff個人部落格)
 * http://www.taichi-maker.com/   (太極創客官網)
 * 
 * =====================電路連接配接======================
 *     紅外發射 LED 正極     --- Arduino Uno 引腳  3
 *     紅外發射 LED 負極     --- Arduino Uno 引腳  GND
 *         
 *  如需獲得詳細電路連接配接說明圖,請參閱太極創客網站:
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程式為配合太極創客制作的
 * 《零基礎入門學用ARDUINO教程-智能應用篇》使用
 * 
 */
#include <IRremote.h>
IRsend irsend;
 
void setup() {
}
 
void loop() {
  for (int i = 0; i < 3; i++) {  
    irsend.sendNEC(0xF7C03F, 32);  //發射NEC紅外遙控協定F7C03F指令碼
    delay(40);
  }
  /*
  * 
  * IRremote庫支援NEC, Sony, Philips RC5, Philips RC6等協定指令。
  * 本示例程式中Arduino将通過調用函數sendSony(0xa90, 12) 來發射Sony協定指令。
  * 該函數的兩個參數中, 0xa90為指令資訊内容,12位指令資訊位數。
  * 
  * 假如需要發射NEC協定指令則可以調用函數sendNEC(0xF7C03F, 32)。
  * 其中0xF740BF為指令資訊内容,32位指令資訊位數。
  * 
  * 如果需要發射其它遙控協定指令請參考以下程式代碼:
  * sendNEC(unsigned long data, int nbits);   //發射NEC協定指令
  * sendSony(unsigned long data, int nbits);  //發射Sony協定指令
  * void sendRC5(unsigned long data, int nbits);   //發射Philips RC5協定指令
  * void sendRC6(unsigned long data, int nbits);   //發射Philips RC6協定指令
  * void sendSharp(unsigned long data, int nbits); //發射Sharp協定指令
  * void sendPanasonic(unsigned int address, unsigned long data); //發射Panasonic協定指令
  * void sendJVC(unsigned long data, int nbits, int repeat);  //發射JVC協定指令
  * void sendRaw(unsigned int buf[], int len, int hz);        //發射原始指令
  */
  delay(5000); //延遲5秒
}           

WS281LED        

LED燈帶

每個燈珠需要60mA

免焊接頭

arduino上面+5v引腳可以作為電源輸入/輸出。

使用第三方庫   FastLED   控制LED光帶。