- arduino版
- 麵包版
- 紅外線接收器KEYES Infrared receiver module for arduino
- LED
- 遙控器
- 按照圖示連,三個接腳為GND/3.3v(5v不行)/S
#include <IRremote.h> //記得下載IRremote.h並解壓移到libraries
int RECEIVE_PIN= 3; //接腳改成自己keyes-S的腳,要選有pwn的
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irreceiver.enableIRIn(); // Start the receiver
}
void loop() {
if (irreceiver.decode(&results)) {
Serial.println(results.value, HEX); //點開右上序列阜視窗,以十六進位(HEX)顯示頻率。建議去掉HEX!另,此程式若常按按鈕只會顯示一次數值,其他為FFFFFFFF(4294967295),一個按鈕可能出現不同數值,多試幾次就可
irreceiver.resume();
程式-按鈕控制LED,按數字幾便閃幾次
直觀式
- 迴圈for
- switch case
#include <IRremote.h>
int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irreceiver.enableIRIn(); //以上相同
pinMode(2,OUTPUT); //接LED的腳
}
void loop() {
if (irreceiver.decode(&results)) {
Serial.println(results.value);
irreceiver.resume();
switch(results.value){ //以results.value的值做判斷
case 16738455: //當值為16728455(按鈕1)時。值可在序列埠視窗按各按鈕查看。若顯示十六進位則須轉成十進位((所以才說不要HEX嘛> <
Serial.println('1'); //在序列埠視窗顯示1
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW); //亮一次後暗
break; //必須加!!case的跑法是從哪裡開始往下跑,而不是單跑一個case,不加的話會繼續跑面下面其他case
case 16750695: //按鈕二
Serial.println('2');
for(int i=0; i<2; i++){ //設定i=0,當i<2時則跑下面程式,每跑一次i就+1
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(100);
} //亮後熄滅跑兩次->亮滅二次
break;
case 16756815:
Serial.println('3');
for(int i=0; i<3; i++){
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(100);
}
break; //亮滅三次
}
}
}
變數式
- 設變數
- 把for拉出來
#include <IRremote.h>
int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irreceiver.enableIRIn(); // Start the receiver
pinMode(2,OUTPUT);
}
void loop() {
if (irreceiver.decode(&results)) {
Serial.println(results.value);
irreceiver.resume();
int times = 0;
switch(results.value){
case 16738455:
Serial.println('1');
times = 1;
break;
case 16750695:
Serial.println('2');
times = 2;
break;
case 16756815:
Serial.println('3');
times = 3;
break;
case 16724175:
Serial.println('4');
times = 4;
break;
case 16718055:
Serial.println('5');
times = 5;
break;
case 16743045:
Serial.println('6');
times = 6;
break;
case 16716015:
Serial.println('7');
times = 7;
break;
case 16726215:
Serial.println('8');
times = 8;
break;
case 16734885:
Serial.println('9');
times = 9;
break;
}
for (int i =0; i<times; i++){ //設變數times,以times數值為迴圈重複次數
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(200);
}
}
}
函數式
#include <IRremote.h>
int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irreceiver.enableIRIn(); // Start the receiver
pinMode(2,OUTPUT);
}
void times(int x){
for (int i = 0;i<x;i++){
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(200);
}
}
void loop() {
if (irreceiver.decode(&results)) {
Serial.println(results.value);
irreceiver.resume();
switch(results.value){
case 16738455:
Serial.println('1');
times(1);
break;
case 16750695:
Serial.println('2');
times(2);
break;
case 16756815:
Serial.println('3');
times(3);
break;
case 16724175:
Serial.println('4');
times(4);
break;
case 16718055:
Serial.println('5');
times(5);
break;
case 16743045:
Serial.println('6');
times(6);
break;
case 16716015:
Serial.println('7');
times(7);
break;
case 16726215:
Serial.println('8');
times(8);
break;
case 16734885:
Serial.println('9');
times(9);
break;
}
}
}
判斷遙控器種類等(引用自參考網站最後一個)
#include <IRremote.h> // 引用 IRRemote 函式庫
const int irReceiverPin = 3;
IRrecv irrecv(irReceiverPin); // 定義 IRrecv 物件來接收紅外線訊號
decode_results results; // 解碼結果將放在 decode_results 結構的 result 變數裏
void setup()
{
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
irrecv.enableIRIn(); // 啟動紅外線解碼
}
// 顯示紅外線協定種類
void showIRProtocol(decode_results *results)
{
Serial.print("Protocol: ");
// 判斷紅外線協定種類
switch(results->decode_type) { //從results裡取出decode_type的值
case NEC:
Serial.print("NEC");
break;
case SONY:
Serial.print("SONY");
break;
case RC5:
Serial.print("RC5");
break;
case RC6:
Serial.print("RC6");
break;
default:
Serial.print("Unknown encoding");
}
// 把紅外線編碼印到 Serial port
Serial.print(", irCode: ");
Serial.print(results->value, HEX); // 紅外線編碼
Serial.print(", bits: ");
Serial.println(results->bits); // 紅外線編碼位元數
}
void loop()
{
if (irrecv.decode(&results)) { // 解碼成功,收到一組紅外線訊號
showIRProtocol(&results); // 顯示紅外線協定種類
irrecv.resume(); // 繼續收下一組紅外線訊號
}
}
參考網站
http://coopermaa2nd.blogspot.tw/2011/02/arduino-serial-led.html switch case用法
http://ming-shian.blogspot.tw/2013/09/arduino.html
http://www.arduino.cc/en/Reference/FunctionDeclaration 函數設置
http://coopermaa2nd.blogspot.tw/2011/03/12.html 判斷遙控器的編碼來源
沒有留言:
張貼留言