前言:
話說控製Arduino的方式有很多種
如果是要傳送很多數據的話通常會用用Serial Port
電腦就透過USB
手機就透過藍芽
.
不過用這些東西來傳送通常會有些缺點
透過USB要拉線
手機的藍芽有時候會連不上
而且有的設備會有明顯的延遲
.

如果要傳送的數據量不大,例如說目標只是個小小的遙控車
或只是偶爾按個上上下左右左右BA給他開心一下
那用紅外線遙控就已經綽綽有餘了
而且價錢不貴,遙控器加上接收器差不多150元~
當然理論上也可以用家裡電視的遙控器
但不要把電用光光就是了~
.
.
https://github.com/coopermaa/Arduino-IRremote
.
和其他眾多教Arduino 紅外線的部落格的方法一樣
用的都是IRremote的Library
.
進入網頁。注意右下角的"Download ZIP",
把上面的網址內的東西下載下來
.

然後解壓縮,把檔案放進你的Arduino IDE的根目錄下的"Library"裡面的
通常位置是在
C:\Program Files (x86)\Arduino\libraries
裡
.
然後把名稱Arduino-IRremote-master
改成IRremote,不然裡面的Library可能沒辦法被Arduino IDE抓到
.
之後就重新打開Arduino的IDE
.

就會發現Example裡面會多出一個IRremote
先打開裡面的 IRrecvDemo
.
- /*
- * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
- * An IR detector/demodulator must be connected to the input RECV_PIN.
- * Version 0.1 July, 2009
- * Copyright 2009 Ken Shirriff
- * http://arcfn.com
- */
- #include<IRremote.h>
- int RECV_PIN = A0;
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- void setup()
- {
- Serial.begin(9600);
- irrecv.enableIRIn(); // Start the receiver
- }
- void loop() {
- if (irrecv.decode(&results)) {
- Serial.println(results.value, HEX);
- irrecv.resume(); // Receive the next value
- }
- }
然後就會看到這段程式碼
主要的功能是把收到的訊號轉成16進位
.
要注意紅外線的Data腳位要接在Analog 0上面
不然就是自己改個程式碼
.

接下來打開Serial Monitor
如果對準接收器按,就會有16進位東西跑出來
如圖,不然按了上上下下左右左右
因為B 和A 找不到,所以就算了=A=
.
如果已不才這支遙控器來說,按一下遙控器的上鍵跑出
FF629D
FFFFFFFF
.
如果按久一點,就會一直出現
FFFFFFFF
.
每一種搖控器定都不同
也有的會一直出現FF629D 之類的,而不是FFFFFFFF
.

但相同的,如果接收器收到了訊號,都會亮紅燈
.
- void loop() {
- if (irrecv.decode(&results)) {
- {
- if(results.value == 0x00FF02FD)
- {
- //插入要的事
- }
- }
- Serial.println(results.value, HEX);
- irrecv.resume(); // Receive the next value
- }
- }
以前面的
FF02FD
FFFFFFFF
來說,FF02FD應該是00FF02FD,16進位
所以如果用比較的話應該改成0x00FF02FD
0x(數字) 表示是一個16進位的數字
前面兩個0不打不才還沒有試過,應該是可以吧...
.
結論:
整體反應還快的,一個遙控器要用到沒電也蠻不容易的
野生的遙控器幾乎是隨處可得,改改一點點程式後又可以繼續玩
相容性又高,算是蠻不錯的操控方式
.
比較明顯的缺點是....
背對接收器案雖然也收得到,但訊號是錯誤的
不過可以靠多裝幾個接收器來解決
.
雖然說可以接收訊號的範圍插不多是10公尺,但到3公尺後就開始出現錯誤了
也是可以改用家用遙控器來解決,訊號會比外面買的那種小布拉雞遙控器強很多
.
家裡的遙控器很多,可以慢慢的挑到中意為止(X
4樓. EGHRW2018/11/30 08:2713EWQFEGTRW(GEW)
3樓. asfzvz2018/04/24 14:340.(yuixxx48561@kimo.com)
2樓. 烏龜2014/09/14 14:43多謝大哥回覆
在請教一個問題
請問文章中的程式碼是不是要像這樣子寫才對?
#include<IRremote.h>
(a0981292771@yuahoo.com.tw)
int RECV_PIN = A0;
1樓. 烏龜2014/09/11 21:51請問板主,出現這個是什麼意思?
IRrecvDemo.cpp.o: In function `setup':
(a0981292771@yahoo.com.tw)
D:\data\Arduino/IRrecvDemo.pde:20: undefined reference to `IRrecv::enableIRIn()'我有點忘了
不過你是把檔案放在Library這個資料夾裡面嗎?~ 他喵的 於 2014/09/11 22:09回覆


