////////////////////////////////////////////////////////////////////////////////////////////////////
/*
電子元件:IR紅外線收發模組
功能:使用LCD顯示 NEC 格式編碼的紅外線訊息
接線:
GND - GND
VCC - 3.3V
SDA - 21
SCL - 22
*/
#include <IRremote.h> // 使用 IRremote 函式庫
#include <LiquidCrystal_I2C.h> // 使用 LiquidCrystal I2C函式庫
#define I2C_ADDR 0x27 // LCD1602模組的預設I2C位址是0x27
#define LCD_COLUMNS 16 // 16行
#define LCD_LINES 2 // 2列
// 建立 LiquidCrystal_I2C 物件,名稱 lcd
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define receiverPin 2 // 紅外線接收模組接腳
IRrecv receiver(receiverPin); // 宣告一個紅外線接收物件
void setup() {
// 初始化 LCD
lcd.init();
lcd.backlight();
// 啟動紅外線接收功能
receiver.enableIRIn();
}
void loop() {
// 檢查是否收到紅外線訊號
if (receiver.decode()) {
translateIR(); // 自訂紅外線訊號處理函式
receiver.resume(); // 準備接收下一個值
}
}
void lcdPrint(char* text)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("button pressed:");
lcd.setCursor(0, 1);
lcd.print(text);
lcd.print(" code: ");
lcd.print(receiver.decodedIRData.command);
}
// 自訂紅外線訊號處理函式
void translateIR()
{
// 依收到的紅外線代碼進行程式分支
switch (receiver.decodedIRData.command) {
case 162:
lcdPrint("POWER");
break;
case 226:
lcdPrint("MENU");
break;
case 34:
lcdPrint("TEST");
break;
case 2:
lcdPrint("PLUS");
break;
case 194:
lcdPrint("BACK");
break;
case 224:
lcdPrint("PREV.");
break;
case 168:
lcdPrint("PLAY");
break;
case 144:
lcdPrint("NEXT");
break;
case 104:
lcdPrint("num: 0");
break;
case 152:
lcdPrint("MINUS");
break;
case 176:
lcdPrint("key: C");
break;
case 48:
lcdPrint("num: 1");
break;
case 24:
lcdPrint("num: 2");
break;
case 122:
lcdPrint("num: 3");
break;
case 16:
lcdPrint("num: 4");
break;
case 56:
lcdPrint("num: 5");
break;
case 90:
lcdPrint("num: 6");
break;
case 66:
lcdPrint("num: 7");
break;
case 74:
lcdPrint("num: 8");
break;
case 82:
lcdPrint("num: 9");
break;
default:
lcd.clear();
lcd.print(receiver.decodedIRData.command);
lcd.print(" other button");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 使用 IRremoteESP8266 函式庫
////////////////////////////////////////////////////////////////////////////////////////////////////
// /*
// 電子元件:IR紅外線收發模組
// 功能:使用LCD顯示 NEC 格式編碼的紅外線訊息
// 接線:
// GND - GND
// VCC - 3.3V
// SDA - 21
// SCL - 22
// */
// #include <IRremoteESP8266.h> // 使用 IRremoteESP8266 函式庫
// #include <IRrecv.h>
// #include <IRutils.h>
// #include <LiquidCrystal_I2C.h> // 使用 LiquidCrystal I2C函式庫
// #define I2C_ADDR 0x27 // LCD1602模組的預設I2C位址是0x27
// #define LCD_COLUMNS 16 // 16行
// #define LCD_LINES 2 // 2列
// // 建立 LiquidCrystal_I2C 物件,名稱 lcd
// LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// #define receiverPin 2 // 紅外線接收模組接腳
// IRrecv receiver(receiverPin); // 宣告一個紅外線接收物件
// decode_results results;
// void setup() {
// // 初始化 LCD
// lcd.init();
// lcd.backlight();
// // 啟動紅外線接收功能
// receiver.enableIRIn();
// }
// void loop() {
// // 檢查是否收到紅外線訊號
// if (receiver.decode(&results)) {
// // 輸出訊號
// serialPrintUint64(results.value, HEX); // print() & println() can't handle printing long longs. (uint64_t)
// translateIR(); // 自訂紅外線訊號處理函式
// receiver.resume(); // 準備接收下一個值
// }
// }
// void lcdPrint(char* text)
// {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("button pressed:");
// lcd.setCursor(0, 1);
// lcd.print(text);
// lcd.print(" code: ");
// lcd.print(results);
// }
// // 自訂紅外線訊號處理函式
// void translateIR()
// {
// // 依收到的紅外線代碼進行程式分支
// switch (results) {
// case 162:
// lcdPrint("POWER");
// break;
// case 226:
// lcdPrint("MENU");
// break;
// case 34:
// lcdPrint("TEST");
// break;
// case 2:
// lcdPrint("PLUS");
// break;
// case 194:
// lcdPrint("BACK");
// break;
// case 224:
// lcdPrint("PREV.");
// break;
// case 168:
// lcdPrint("PLAY");
// break;
// case 144:
// lcdPrint("NEXT");
// break;
// case 104:
// lcdPrint("num: 0");
// break;
// case 152:
// lcdPrint("MINUS");
// break;
// case 176:
// lcdPrint("key: C");
// break;
// case 48:
// lcdPrint("num: 1");
// break;
// case 24:
// lcdPrint("num: 2");
// break;
// case 122:
// lcdPrint("num: 3");
// break;
// case 16:
// lcdPrint("num: 4");
// break;
// case 56:
// lcdPrint("num: 5");
// break;
// case 90:
// lcdPrint("num: 6");
// break;
// case 66:
// lcdPrint("num: 7");
// break;
// case 74:
// lcdPrint("num: 8");
// break;
// case 82:
// lcdPrint("num: 9");
// break;
// default:
// lcd.clear();
// lcd.print(receiver.decodedIRData.command);
// lcd.print(" other button");
// }
// }
////////////////////////////////////////////////////////////////////////////////////////////////////
// /*
// * 電子元件:紅外線接收模組
// * 功能:收訊輸出紅外線訊號的16進位值 *
// */
// //#include <Arduino.h>
// #include <IRremoteESP8266.h>
// #include <IRrecv.h>
// #include <IRutils.h>
// #define receiverPin 2 // 紅外線接收模組接腳
// IRrecv receiver(receiverPin); // 宣告一個紅外線接收物件
// decode_results results;
// void setup() {
// Serial.begin(115200);
// receiver.enableIRIn(); // 啟動紅外線接收功能
// }
// void loop() {
// if (receiver.decode(&results)) {
// serialPrintUint64(results.value, HEX); // 輸出紅外線訊號的值 // print() & println() can't handle printing long longs. (uint64_t)
// Serial.println("");
// receiver.resume(); // 準備接收下一個值
// }
// delay(100);
// }
////////////////////////////////////////////////////////////////////////////////////////////////////