Arduino學習筆記 (五) -- 紅外接收與解碼


實驗原料:

  1、PC一台

  2、Arduino UNO R3 + type-b數據線

  3、紅外遙控 + 紅外接收模塊

  4、發光led二極管

  5、杜邦線若干

  6、電阻(用作限流 100R ~ 1K)

模塊連接:

  紅外接收器的signal接在數字引腳11上

  GND接控制板的GND

  VCC接控制板上+5V

  發光二極管正極引腳接在數字引腳4上,

  LED負極通過220歐姆電阻回到控制板的GND

效果:

  紅外遙控器按下按鍵時,電腦的串口監視器顯示按鍵編碼

  若按下數字鍵1,則LED點亮

  若按下數字鍵2,則LED熄滅

下面上代碼

#include <IRremote.h>

int RECV_PIN = 11;//定義紅外接收器的引腳為11
int LED_PIN = 4; //定義發光LED引腳數字4
int a = 0;
IRrecv irrecv(RECV_PIN);

decode_results results;

String jian[17] = {
  "1", "2", "3",
  "4", "5", "6",
  "7", "8", "9",
  "*", "0", "#",
  "",
  "", "OK", "",
  ""

};
String ma[17] = {
  "16753245", "16736925", "16769565",
  "16720605", "16712445", "16761405",
  "16769055", "16754775", "16748655",
  "16738455", "16750695", "16756815",
  "16718055",
  "16716015", "16726215", "16734885",
  "16730805"

};
void setup()
{
  Serial.begin(9600);       //  串口波特率
  irrecv.enableIRIn();      //  初始化紅外接收器
  pinMode(LED_PIN, OUTPUT); //  設置發光LED引腳數字4
}
String getjian(unsigned long mastr) {
  String result = "";
  for ( int i = 0; i < 17; ++i ) {
    if (String(mastr) == ma[i]) {
      result = jian[i];
      break;
    }
  }
  return result;
}

int val = 0 ;
void loop() {
  if (irrecv.decode(&results)) {
    //    Serial.println(results.value);      // 輸出按鍵值(未解碼)
    if (results.value != 4294967295) {
      String zi = getjian(results.value);
      Serial.println(zi);
      if (zi == "1") {
        digitalWrite(LED_PIN, HIGH); //LED點亮
      }
      if (zi == "2") {
        digitalWrite(LED_PIN, LOW); //LED點亮
      }
      if (zi == "") {
        val += 30;
        if (val >= 1024) {
          val = 1024;
        }
        analogWrite(LED_PIN, val);//val 是 0~255 的整數值,對應電壓從 0 到+5V
        int vvvv = analogRead(LED_PIN);
        Serial.println(vvvv);
        //        digitalWrite(LED_PIN,HIGH);//LED點亮

      }
      if (zi == "") {
        //        digitalWrite(LED_PIN,LOW);//LED點亮
        val -= 30;
        if (val <= 1) {
          val = 1;
        }
        analogWrite(LED_PIN, val);//val 是 0~255 的整數值,對應電壓從 0 到+5V
        int vvvv = analogRead(LED_PIN);
        Serial.println(vvvv);
      }
    }
    irrecv.resume(); // 接收下一個值
  }
}

 

 

備注:

  代碼需要提前安裝IRremote庫,用於接收紅外

  因使用的是數字IO(只能輸出高低電平),下一步計划使用模擬IO,通過上下按鍵來改變電壓(PWM占空比)實現LED亮度的控制

  任意按鍵長按時,紅外接收的16進制數據為0,可設置邏輯來判斷長按的按鍵,后期可以通過紅外來控制遙控車或者機械臂等硬件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM