image

 

這次要做的東西,是 [ 利用紅外線遙控器,遠端遙控LED燈]

需要的元件有:

---

.Arduino R3

.IR remote 紅外線接收器 (VCC,GND,Vout)

.4x20 character lcd I2C (i2c slace address: 0x3F , GND,SDA,SCL,VCC)

.LED 

---

 

硬體接法:

P_20210914_145724

  .IRremote 接收器 - VCC接5V, Vout接在 pin2 ,GND接地。

  .Led- GND接地、VCC接在 pin 8。

  .4x20 character lcd I2C - GND接地、VCC接5V、SDA接再AREF上面的SDA 、SCL接再AREF上面的SCL。

 

軟體需求:

  .安裝NewliquidCrystal_1.3.4.zip

  .安裝Arduino-IRremote-master.zip

 

Arduino 程式碼:

#include <IRremote.h>
#include <LiquidCrystal_I2C.h>


  // Set the pins on the I2C chip used for LCD connections:
  //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // 設定 LCD I2C 位址 0x3F
  char str[6] = "";
  int ledpin = 8;
  int serdata;
  bool bl_led = false;
  const int irReceiverPin = 2;
  IRrecv irrecv(irReceiverPin);    // 初始化紅外線訊號輸入
  decode_results results;    // 儲存訊號的結構
  int ir_data;

void setup() {
  pinMode(ledpin, OUTPUT); 
  Serial.begin(115200);  // 用於手動輸入文字
  lcd.begin(20, 4);      // 初始化 LCD,一行 20 的字元,共 4 行,預設開啟背光

  lcd.backlight();

  
  // 初始化畫面
  lcd.clear();
  lcd.setCursor(0, 0); // 設定游標位置在第一行行首
  lcd.print("init lcd ok.");
  lcd.setCursor(0, 1);
  lcd.print("init remote ok.");
  lcd.setCursor(0, 2);
  lcd.print("ready!");
  lcd.setCursor(0, 3); // 設定游標位置在第四行行首
  lcd.print("code:");
  irrecv.blink13(true); // 設為true的話,當收到訊號時,腳位13的LED便會閃爍
  irrecv.enableIRIn(); // 啟動接收
  
}

void loop() {


  if (irrecv.decode(&results)  ) { // 接收紅外線訊號並解碼
   if (results.decode_type == NEC) {
      Serial.print("NEC: ");
    } else if (results.decode_type == SONY) {
      Serial.print("SONY: ");
    } else if (results.decode_type == RC5) {
      Serial.print("RC5: ");
    } else if (results.decode_type == RC6) {
      Serial.print("RC6: ");
    } else if (results.decode_type == UNKNOWN) {
      Serial.print("UNKNOWN: ");
    }
        
    Serial.print("results value is "); // 輸出解碼後的資料
    Serial.print(results.value, HEX);
    Serial.print(", bits is ");
    Serial.print(results.bits);
    Serial.print(", decode_type is ");
    Serial.println(results.decode_type);

   if (results.value == 0xFF30CF){
    Serial.print(" case 1 ");
    if (bl_led == false){
      led_on();
      bl_led = true;
    }else{  
      led_off();
      bl_led = false;
    }
  }
    sprintf (str, " %04x", results.value);
    Serial.println(str);
    lcd.setCursor(6, 3);
    lcd.write(str);
    irrecv.resume(); // 準備接收下一個訊號
  }
  

}

void led_on(){
  digitalWrite(ledpin, HIGH);  
}

void led_off(){
  digitalWrite(ledpin, LOW);  
}

 

測試效果與結果:

   .當按下遙控器特定按鍵時,led就會開啟,再按一次,就會關閉led

P_20210914_145148

 

 

arrow
arrow
    創作者介紹
    創作者 CuteParrot 的頭像
    CuteParrot

    馴龍窩

    CuteParrot 發表在 痞客邦 留言(0) 人氣()