2016年7月26日 星期二

Arduino UNO學習522.紅外線搖控器控制元件



Arduino UNO學習522.紅外線搖控器控制元件

此篇要用搖控器來控制LED燈及蜂鳴器,
目前ArduBlock與該外部函式庫IRremote無法完全搭配,
因此由ArduBlock編寫部分程式,再手寫修改加入內建範例程式中,
確認已學習安裝IRremote函式庫,並已學會取得搖控器的編碼,
請參考學習520.紅外線搖控器,並將IRrecvDemo的程式碼取出待用,
下圖安裝了2種元件,自行預設搖控器找2個按鍵的編碼作對應,
分別左為紅外線接收器,蜂鳴器,LED燈另外加上野生遙控器一支



完成硬體後,第一步打開內建範例IRremote\IRrecvDemo,上傳後打開監控視窗,
隨便找遙控按鍵取得編碼,取紙張記錄下按鍵的編碼,並將範例檔案取出備用,
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

第二步,打開ArduBlock編寫部分程式如下,將取得的遙控編碼加上0x00,
FF30CF改為0x00FF30CF,並設定當遙控器碼FF30CF按下時則Pin2燈高3秒,
當遙控器碼FF18E7時Pin4蜂鳴器叫1秒,依圖找出ArduBlock的拼圖塊吧


上傳後先取得由ArduBlock作成的程式碼到筆記本或其他編輯軟體上,
unsigned long _ABVAR_1_IR = 0UL ;
void setup()
{
  pinMode( 2 , OUTPUT);
  pinMode( 4 , OUTPUT);
}

void loop()
{
  if (( ( _ABVAR_1_IR ) == (0x00FF30CFUL ) ))
  {
    digitalWrite(2 , HIGH);
    delay( 3000 );
    digitalWrite(2 , LOW);
  }
  if (( ( _ABVAR_1_IR ) == (0x00FF18E7UL ) ))
  {
    digitalWrite(4 , HIGH);
    delay( 1000 );
    digitalWrite(4 , LOW);
  }
}

第三步要將內建的程式碼和ArduBlock編寫的程式碼二合一修改,
依內建的程式碼為主,加上setup宣告pin2和pin4,並將變數名稱_ABVAR_1_IR
修改為results.value,及ArduBlock的loop部分加入到程式中,變成如下
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode( 2 , OUTPUT); //設定
  pinMode( 4 , OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
//加入遙控編碼動作
    if (( (results.value) == ( 0x00FF30CFUL ) ))
  {
    digitalWrite(2 , HIGH);
    delay( 3000 );
    digitalWrite(2 , LOW);
  }
    if (( (results.value) == ( 0x00FF18E7UL ) ))
  {
    digitalWrite(4 , HIGH);
    delay( 1000 );
    digitalWrite(4 , LOW);
  }
    irrecv.resume(); //準備下一訊號
  }
}

上傳後打開監控視窗,按下預設的遙控器鈕,是否可正常操作,
遙控器太遠時會接收到錯誤的編碼,試試家中其他的遙控器吧,
可近一步透過繼電器來控制其他家電啟動,或製作壓按式的自動門試試,