這次要做的東西,是 [ 利用紅外線遙控器,遠端遙控LED燈]
需要的元件有:
---
.Arduino R3
.IR remote 紅外線接收器 (VCC,GND,Vout)
.4x20 character lcd I2C (i2c slace address: 0x3F , GND,SDA,SCL,VCC)
.LED
---
硬體接法:
.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
留言列表