實驗原料:
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,可設置邏輯來判斷長按的按鍵,后期可以通過紅外來控制遙控車或者機械臂等硬件