2019年6月25日 星期二

紅外線

我買的接收器是VS1838B

https://github.com/z3t0/Arduino-IRremote

想要做到把接收到的遙控器編碼顯示在LCD上,並且可以控制繼電器

依照底下程式碼把線接好,使用的是內建的library

#include <LiquidCrystal.h>
#include <IRremote.h>
#include <IRremoteInt.h>

LiquidCrystal lcd(11,12,6,5,4,3);              //設定LCD需要的腳位
  int irReceiverPin = 2;                             //設定紅外線的接收腳位
   int power=7;
  IRrecv irrecv(irReceiverPin);                // 宣告一個變數儲存接收紅外線訊號
  decode_results results;                          // 宣告一個變數儲存儲存訊號解譯的結果

void setup() {
  // put your setup code here, to run once:
lcd.begin(16,2);
lcd.print("hello,world!");
Serial.begin(9600);
  irrecv.blink13(true); // 設為true的話,當收到訊號時,腳位13的LED便會閃爍
  irrecv.enableIRIn(); // 啟動接收
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.backlight();
  pinMode(7,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
lcd.setCursor(0,1);
  if (irrecv.decode(&results)) {                  // 假如有收到紅外線訊號
    lcd.clear();
    Serial.print("results value is ");             // 輸出解碼後的資料
    Serial.println(results.value, HEX);
    lcd.print(results.value, HEX);

      switch (results.value) {
            case ;
                 //digitalWrite(7,HIGHT);
                  break;

            case ;
                   //digitalWrite(7,LOW);
                     break;   
           }
    delay(1000);
    irrecv.resume();                                     // 準備接收下一個訊號
}



但是,用上面的libraries卻一直無法正確編譯,應該是說對於同一個紅外線按鈕解譯後的數值不固定,所以去找了一本"Arduino實作入門與應用",用作者所提供的libraies,才成功抓到固定的數值,這樣,我就可以把腳位13連到繼電器,用紅外線做了一個遙控開關,


#include <LiquidCrystal.h>
#include<rc95a.h>

int cir=7;                         //紅外線腳位
int led=13;                       //led腳位
LiquidCrystal lcd(11,12,6,5,4,3);              //LCD需要的腳位
int c,i,code;

void setup() {
lcd.begin(16,2);
lcd.print("hello,world!");
pinMode(cir,INPUT);
Serial.begin(9600);
}


void loop() {
    while(1)
      {
        lcd.setCursor(0,1);
     
        Serial.println("ir code is : ");
         loop:
          no_ir=1; ir_ins(cir); if(no_ir==1) goto loop;
         rev();
          for(i=0; i<4; i++)
           {c=(int)com[i]; Serial.print(c);lcd.print(c);}

           code=(int)com[3];
           switch (code)
           {
             case 243:
                digitalWrite(led, HIGH);
                break;
             case 233:
                digitalWrite(led, LOW);
                break;
           }
            delay(30);
       }

}

沒有留言:

張貼留言