實驗目的
練習製作一個電視紅外線遙控器。在這個實驗裏,你將練習用 IRRemote 函式庫發射紅外線訊號,然後搭配一個 Keypad 做出一個電視遙控器。預計製作的紅外線遙控器,其外觀如下:
▲ Keypad 數字 0 ~ 9 是作選頻道用,而 * 鍵是降低音量,# 鍵是提高音量
前提
在做這個實驗前,我假設:
- 你已經看過「IRRemote 紅外線遙控教學」這系列的教學
- 已經把 IRRemote 函式庫安裝起來
- 讀過「Arduino 筆記 – Lab18 讀取 3x4 Keypad 的輸入」一文,知道 Keypad 的使用方法,而且也已經把 Keypad 函式庫安裝好了
材料
- 麵包板 x 1
- Arduino 主板 x 1
- 發射波長為 940nm 的紅外線發射器 x 1
- 3x4 Keypad
- 100 歐姆電阻 x 1
- 單心線 x N
識別 Keypad 的接腳
由於 Keypad 的腳位定義並沒有標準,所以,在使用 Keypad 前,必須先找出 Keypad 行(Column)與列(Row)線路所在的接腳。一個方法是用電表,對 Keypad 所有接腳兩兩量測,這部份可參考 Keypad Tutorial 的說明。另一個則是土法煉鋼的方法,把螺絲取下直接打開 Keypad 看它的電路。
以本實驗所用的 3x4 Keypad 為例,這個 Keypad 總共有 7 支接腳,上圖即 Keypad 拆開後的照片,它的電路結構很簡單,循著線路看就可以查出行(Column)與列(Row)線路所在的接腳,三個行(Columns)由左而右依序是 3, 1, 5 接腳,而四個列 (Rows) 從上而下依序是 2, 7, 6, 4 接腳。如下圖右下角的電路圖所示,可以拿個紙筆把你所用的 Keypad 行列所在的接腳抄寫下來,方便記憶。
▲ 圖片來源: arduino.cc
接線
- 照下表把 Arduino 與 Keypad 連接起來 (Columns: 3, 1, 5, Rows: 2, 7, 6, 4)
Keypad 接腳 Arduino 接腳 說明 1 12 Column1 2 11 Row0 3 10 Column0 4 9 Row3
5 8 Column2
6 7 Row2 7 6 Row1
- 如果你用的 Keypad 它的 Column0~Column2 是在 1, 2, 3 接腳,而 Row0~Row3 是在 4, 5, 6, 7 接腳的話,請照下表連接 Keypad 與 Arduino:
Keypad 接腳 Arduino 接腳 說明 1 12 Column0 2 11 Column1 3 10 Column2 4 9 Row0
5 8 Row1
6 7 Row2 7 6 Row3
- 把紅外線發射器(IR LED)接到 pin 3,長腳(陽極)串接一顆 100 ohm 電阻接到 pin 3,短腳(陰極)接到 GND
注意!因為 IRRemote 函式庫限定使用 pin 3,所以你只能把紅外線發射器接到 pin 3,不能接到其它腳位。
錄製按鍵的紅外線編碼
參考「1.5 兩個取得遙控器紅外線資料的方法」一文錄製電視遙控器的紅外線資料。以我所用的電視遙控器為例,用 IRRemote 解碼之後,可知我電視遙控器講的是 NEC 紅外線協定,紅外線編碼資料長度都是 32 位元。我取得的數字按鍵以及音量鍵(Volume- 和 Volume+)紅外線編碼如下:
程式
底下就是這個紅外線遙控器的程式(Keypad_TVRemote.pde):
注意! 記得把 irKeyCodes 裏的資料換成你自己的遙控器的紅外線編碼。另外,如果你的遙控器講的不是 NEC 而是其它紅外線協定,例如 Philips RC5,記得也要把 sendNEC() 這行換成其它發射紅外線的函式,例如 sendRC5()。
示範影片
動動腦
請找一個紅外線遙控器,電視、音響、手機、相機、投影機或是冷氣機的遙控器都可以,然後修改這個實驗的範例程式,用 Arduino 做一個遙控器來控制你的影音設備。
71 意見:
這超棒拉!下次我也要試一下
試試看,真的超簡單。
這個能在設一個按鈕來做電視的開跟關嗎?或者是用光敏電阻另外設一個電視的開關?@@~ 拜託大大了~~
我「發射紅外線訊號」這篇剛好有這麼一個範例程式,利用一個按鈕來控制電視的開關: http://coopermaa2nd.blogspot.com/2011/03/21.html
請問 我買100ohm +- 1%
1/4W的電阻跟10kohm +-1% 1/4w
940nm紅外線發射 他有很多種呢 分不清楚 我買淡藍色的
keyword我買接腳在123數字鍵上面的 也有*0#底下的接腳有差嗎? 不好意思 感謝 還是你能給我比較詳細的電子材料表~~~
電阻沒問題。
我買的紅外線發射器也是淡藍色的,我有看過白色的,顏色可能沒什麼關係吧,只要確定發射波長是 940nm 就對了。
Keypad 的話,要注意它的接腳。我看一般好像分成兩種。我在底下這篇有提到,到時你可以照著上面的步驟檢查,看看你買的是哪一種:
http://coopermaa2nd.blogspot.com/2011/01/arduino-lab18-3x4-keypad.html
不錯喔!你是行動派的。Luck for you.
紅外線編碼取下來之後前面要再+0x嗎?沒+的話會錯誤呢
紅外線編碼要改之外 還有其他要改嗎?因為我現在試沒辦法遙控電視呢?謝謝
是的,要發射的時候,編碼前必須加上 0x。
在 C 語裏,數字前的 0x 代表這個是 16 進位的數字。
那程式方面還有其他需要修改的嗎?謝謝
Protocol: Unknown encoding, irCode(): 57C003F9, bits: 32這是我解碼出來的 那我的協定要改成什麼?感恩
注意! 記得把 irKeyCodes 裏的資料換成你自己的遙控器的紅外線編碼。另外,如果你的遙控器講的不是 NEC 而是其它紅外線協定,例如 Philips RC5,記得也要把 sendNEC() 這行換成其它發射紅外線的函式,例如 sendRC5()。
Protocol: Unknown encoding, irCode: 57C003F9, bits: 32
這是我接收的紅外線訊號 那我紅外線函士要改成什麼?感恩
如果你的遙控器講的不是 NEC 而是其它紅外線協定,例如 Philips RC5,記得也要把 sendNEC() 這行換成其它發射紅外線的函式,例如 sendRC5()。
Unknown encoding??
每次收到的碼都是 Unknown encoding 嗎?可不可以多試幾次看會不會不一樣。
如果每次都是 Unknown encoding 的話,你試試看用 sendRaw()。
用Raw會出現這錯誤呢?謝謝
sketch_nov03a.cpp: In function 'void loop()':
Keypad_TVRemote:75: error: no matching function for call to 'IRsend::sendRaw(long int&, int)'
C:\Users\wowo\Desktop\arduino-0022\libraries\IRremote/IRremote.h:80: note: candidates are: void IRsend::sendRaw(unsigned int*, int, int)
sendRaw() 要三個參數。
sendNEC(irCode, 32, 38); // 第三個參數的 38 是 38 KHz 的意思
今天用SONY的遙控器有爭測到 可是改上去有錯誤呢
Protocol: SONY, irCode: 490, bits: 12
bits: 12是 12的話有什麼地方要改嗎?謝謝
所以你遙控器講的是 SONY Protocol。
改上去有什麼錯誤?
我改了遙控器的紅外線編碼和這條程式
irsend.sendSONY(irKeyCodes[irKeyIndex], 12);
出現以下錯誤~~~
sketch_nov04a.cpp: In function 'void loop()':
Keypad_TVRemote:75: error: 'class IRsend' has no member named 'sendSONY'
大小寫有差喔:
sendSONY() 跟 sendSony() 是不一樣的
可以執行了 可是案沒反應呢~
我在爭測遙控器紅外線他都會比一般遙控器在多一行解碼呢!
是不是要再改解碼編號那邊再做什麼改變?
Protocol: SONY, irCode: E10, bits: 12
Protocol: SONY, irCode: E10, bits: 12
Protocol: SONY, irCode: 110, bits: 12
Protocol: SONY, irCode: 110, bits: 12
都是一次2行
這行程是這樣改對嗎?
irsend.sendSony(irKeyCodes[irKeyIndex], 12);// 發射紅外線訊號
不好意思 那麼多問題打擾了~
嗯,程式沒錯。
我沒用過 Sony Protocol,不過聽說 Sony Protocol 在發射的時候必須像底下這樣連續送三次才行,你試試看:
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
delay(100);
}
不好意思 這三行要+到程式的哪裡~"~
你說呢?
+了這三行按keypad會變成電視 開跟關呢@@~
哈。你已經把 keypad 也弄上去了啊?
照你上面做的阿~"~
所以你是照著這篇的教學用 Keypad 自製電視紅外線遙控器啊?
問一下,你是自己在玩 Arduino 嗎?
跟我一樣純綷好玩,還是說工作上或課堂上會用到?
學校上課會用到很多arduino的東西~
老師又不知道在教什麼~看無
這一項我是覺得材料很容易就買的到就做做看
蠻好玩的~只是 程式真的有待進步
大大 也經可以瞜!!城市改成這樣
for (int i = 0; i < 3; i++) {
irsend.sendSony(irKeyCodes[irKeyIndex], 12); // Sony TV power code
delay(100);
謝謝瞜~後面還是會有問題問你的 再麻煩妳了~"~
已經搞定啦!?
恭禧你啊!
「發表是最好的記憶」,你也寫篇文章分享一下吧!
不客氣,學習寫程式沒什麼,就是多找題目來練習。加油啊!
學校我們這一屆開始都要碰arduino都沒有學長做過 我們這一屆當白老鼠~老師上課又不知道在教什麼~看無
想說做這個材料方便取得 就做做看瞜
有助於學習~~~呵呵
後面還是會有問題要問你 到時再麻煩妳了~
大大可以瞜!!程式改成這樣就可以了
for (int i = 0; i < 3; i++) {
irsend.sendSony(irKeyCodes[irKeyIndex], 12); // Sony TV power code
delay(100);
}
請問你唸哪間學校?
現在好像有愈來愈多的學校在開 arduino 的課程
這是很好的現象
因為我覺得比起 8051,學習 arduino 的曲線真的簡單多了。
我有寫「arduino 教學」這系列入門教學,你照著步驟一個一個做,也許會有幫助:
http://coopermaa2nd.blogspot.com/2011/05/arduino.html
歡迎常來啊!
新竹大華技術學院~~~你可能沒聽過
不怎麼樣的學校 呵呵 謝謝瞜
有聽過,不過沒去過。其實我很少去新竹,新竹很多地方都沒啥印象。
不會啦,真要唸書的話,人還是可以出辦法啦的。
最簡單的方法就是呼朋引伴囉。
大大 需要請你幫忙了
我現在是用另一台電視遙控器+一個button設電視的開關
現在是可以選台 但開電視一下能開 一下又不能開這樣
用moiter爭測不到HIGH呢 幫我看看程式哪裡需要修改的
謝謝
/*
* Keypad_TVRemote.pde: 自製紅外線電視遙控器(使用 Keypad)
*/
#include // 引用 Keypad 函式庫
#include // 引用 IRRemote 函式庫
const int buttonPin = 4; // 按鍵(pushbutton)接在 pin 4
int buttonState = 0; // 按鍵狀態
const byte ROWS = 4; // 3x4 Keypad
const byte COLS = 3;
char keys[ROWS][COLS] = { // 定義 Keypad 的按鍵
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// 定義 Keypad 連到 Arduino 的接腳
// Keypad 腳位佈局:
// Rows: 2, 7, 6, 4
// Cols: 3, 1, 5
byte rowPins[ROWS] = {11, 6, 7, 9}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {10, 12, 8}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
/*
// Keypad 腳位佈局:
// Rows: 4, 5, 6, 7
// Cols: 1, 2, 3
byte rowPins[ROWS] = {9, 8, 7, 6}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {12, 11, 10}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
*/
// 建立 Keypad 物件
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// 紅外線編碼對應表
// 這是我電視遙控器的紅外線編碼,記得換成你的紅外線編碼
long irKeyCodes[12] = {
0x6F920DF, 0x6F9A05F, 0x6F9FA05, // 對應 Keypad 的 '1', '2', '3'
0x6F9E01F, 0x6F910EF, 0x6F9906F, // 對應 Keypad 的 '4', '5', '6'
0x6F950AF, 0x6F9D02F, 0x6F930CF, // 對應 Keypad 的 '7', '8', '9'
0x6F9A857, 0x6F9C03F, 0x6F99867 , // 對應 Keypad 的 '*', '*', '#'
};
IRsend irsend; // 定義 IRsend 物件來發射紅外線訊號
void setup()
{
pinMode(buttonPin, INPUT); // 把 buttonPin 設置成 INPUT
{
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
}
}
void loop()
{
// 讀取按鍵狀態
buttonState = digitalRead(buttonPin);
// 檢查按鍵是否被按下(pressed)
// 有的話,buttonState 會是 HIGH
if (buttonState == HIGH){
// 發射紅外線訊號
irsend.sendNEC(0x6F900FF, 32); // 我電視 Power 鈕的紅外線編碼, 記得換成你的紅外線編碼
}
{
char key = keypad.getKey();
byte irKeyIndex;
// 檢查 Keypad 是否有被按下
// 有的話,key 會是非 NO_KEY 的值
if (key != NO_KEY){
Serial.println(key); // 把按鍵印到 Serial Port
// 計算 irKeyCodes 的索引
switch (key) {
case '*':
irKeyIndex = 9; // 降低音量 (volume-)
break;
case '0':
irKeyIndex = 10; // 按鍵 '0'
break;
case '#': // 提高音量 (volume+)
irKeyIndex = 11;
break;
default:
irKeyIndex = key - '1'; // 按鍵 1 ~ 9
}
irsend.sendNEC(irKeyCodes[irKeyIndex], 32); // 發射紅外線訊號
}
}
}
大大我現在換用另一台電視 紅外線遙控+button做電視開關
現在程式一樣可以選台~電視開關有時可以有時不可以怪怪的
用moniter爭測也沒有HIGH呢
幫我看看成是哪裡出問題了 謝謝~
/*
* Keypad_TVRemote.pde: 自製紅外線電視遙控器(使用 Keypad)
*/
#include // 引用 Keypad 函式庫
#include // 引用 IRRemote 函式庫
const int buttonPin = 4; // 按鍵(pushbutton)接在 pin 4
int buttonState = 0; // 按鍵狀態
const byte ROWS = 4; // 3x4 Keypad
const byte COLS = 3;
char keys[ROWS][COLS] = { // 定義 Keypad 的按鍵
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// 定義 Keypad 連到 Arduino 的接腳
// Keypad 腳位佈局:
// Rows: 2, 7, 6, 4
// Cols: 3, 1, 5
byte rowPins[ROWS] = {11, 6, 7, 9}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {10, 12, 8}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
/*
// Keypad 腳位佈局:
// Rows: 4, 5, 6, 7
// Cols: 1, 2, 3
byte rowPins[ROWS] = {9, 8, 7, 6}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {12, 11, 10}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
*/
// 建立 Keypad 物件
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// 紅外線編碼對應表
// 這是我電視遙控器的紅外線編碼,記得換成你的紅外線編碼
long irKeyCodes[12] = {
0x6F920DF, 0x6F9A05F, 0x6F9FA05, // 對應 Keypad 的 '1', '2', '3'
0x6F9E01F, 0x6F910EF, 0x6F9906F, // 對應 Keypad 的 '4', '5', '6'
0x6F950AF, 0x6F9D02F, 0x6F930CF, // 對應 Keypad 的 '7', '8', '9'
0x6F9A857, 0x6F9C03F, 0x6F99867 , // 對應 Keypad 的 '*', '*', '#'
};
IRsend irsend; // 定義 IRsend 物件來發射紅外線訊號
void setup()
{
pinMode(buttonPin, INPUT); // 把 buttonPin 設置成 INPUT
{
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
}
}
void loop()
{
// 讀取按鍵狀態
buttonState = digitalRead(buttonPin);
// 檢查按鍵是否被按下(pressed)
// 有的話,buttonState 會是 HIGH
if (buttonState == HIGH){
// 發射紅外線訊號
irsend.sendNEC(0x6F900FF, 32); // 我電視 Power 鈕的紅外線編碼, 記得換成你的紅外線編碼
}
{
char key = keypad.getKey();
byte irKeyIndex;
// 檢查 Keypad 是否有被按下
// 有的話,key 會是非 NO_KEY 的值
if (key != NO_KEY){
Serial.println(key); // 把按鍵印到 Serial Port
// 計算 irKeyCodes 的索引
switch (key) {
case '*':
irKeyIndex = 9; // 降低音量 (volume-)
break;
case '0':
irKeyIndex = 10; // 按鍵 '0'
break;
case '#': // 提高音量 (volume+)
irKeyIndex = 11;
break;
default:
irKeyIndex = key - '1'; // 按鍵 1 ~ 9
}
irsend.sendNEC(irKeyCodes[irKeyIndex], 32); // 發射紅外線訊號
}
}
}
大大我留給你的言怎會不見= =
想請問你紅外線遙控+button程式要怎麼寫~
我貼程式上來 好像都會被移除耶@@~
#include // 引用 Keypad 函式庫
#include // 引用 IRRemote 函式庫
const int buttonPin = 4; // 按鍵(pushbutton)接在 pin 4
int buttonState = 0; // 按鍵狀態
const byte ROWS = 4; // 3x4 Keypad
const byte COLS = 3;
char keys[ROWS][COLS] = { // 定義 Keypad 的按鍵
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// 定義 Keypad 連到 Arduino 的接腳
// Keypad 腳位佈局:
// Rows: 2, 7, 6, 4
// Cols: 3, 1, 5
byte rowPins[ROWS] = {11, 6, 7, 9}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {10, 12, 8}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
byte rowPins[ROWS] = {9, 8, 7, 6}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {12, 11, 10}; // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2
*/
// 建立 Keypad 物件
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// 紅外線編碼對應表
// 這是我電視遙控器的紅外線編碼,記得換成你的紅外線編碼
long irKeyCodes[12] = {
0x6F920DF, 0x6F9A05F, 0x6F9FA05, // 對應 Keypad 的 '1', '2', '3'
0x6F9E01F, 0x6F910EF, 0x6F9906F, // 對應 Keypad 的 '4', '5', '6'
0x6F950AF, 0x6F9D02F, 0x6F930CF, // 對應 Keypad 的 '7', '8', '9'
0x6F9A857, 0x6F9C03F, 0x6F99867 , // 對應 Keypad 的 '*', '*', '#'
};
IRsend irsend; // 定義 IRsend 物件來發射紅外線訊號
void setup()
{
pinMode(buttonPin, INPUT); // 把 buttonPin 設置成 INPUT
{
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
}
}
void loop()
{
// 讀取按鍵狀態
buttonState = digitalRead(buttonPin);
// 檢查按鍵是否被按下(pressed)
// 有的話,buttonState 會是 HIGH
if (buttonState == HIGH){
// 發射紅外線訊號
irsend.sendNEC(0x6F900FF, 32); // 我電視 Power 鈕的紅外線編碼, 記得換成你的紅外線編碼
}
{
char key = keypad.getKey();
byte irKeyIndex;
// 檢查 Keypad 是否有被按下
// 有的話,key 會是非 NO_KEY 的值
if (key != NO_KEY){
Serial.println(key); // 把按鍵印到 Serial Port
// 計算 irKeyCodes 的索引
switch (key) {
case '*':
irKeyIndex = 9; // 降低音量 (volume-)
break;
case '0':
irKeyIndex = 10; // 按鍵 '0'
break;
case '#': // 提高音量 (volume+)
irKeyIndex = 11;
break;
default:
irKeyIndex = key - '1'; // 按鍵 1 ~ 9
}
irsend.sendNEC(irKeyCodes[irKeyIndex], 32); // 發射紅外線訊號
}
}
}
不曉得怎麼回事
你的留言常常會被 blogger 當成垃圾留言
我都是收到信後再去 blogger 把你的留言改成不是垃圾留言,這才會顯示出來的說。
看你之前的測試結果
你遙控器不是講 SONY Protocol 的嗎?
可是我看你程式碼還是寫 sendNEC(),這樣可以動嗎?
你現在是用一個 Keypad 再加一個按鈕在控制嗎?
嗯,建議要分而治之
先測 Keypad 或按鈕的部份都行,先一部份一部份測
確定兩個部份都沒問題後,再合起來一起測
有2台電是在做測試 sony的當天搖控好以後馬上就接button來作開關 一切都很順利 都可以用 重開機之後又怪怪的了 沒反應
所以我現在在測另一台電視NEC的
大大您說的我會再做測試看看~謝謝
原來如此。
自己接按鈕的話,要注意按鈕會有彈跳的問題:
http://coopermaa2nd.blogspot.com/2011/07/42-timer-as-counter.html
請問一下 我現在宿舍電視是東元的大頭寶寶(以前的電視)
他編號都是Unknown encoding 是不是就解不出來紅外線協定了~
試了很多次都是 Unknown encoding 的話,有可能是 IRRemote 不認得的紅外線協定。
那 irCode 跟 bits (資料長度) 有解出來嗎?
如果每次 irCode 跟 bits 都一樣,也許還是可以用 sendRaw() 來發射紅外線。
Protocol: Unknown encoding, irCode: B555435, bits: 32
sendRaw() 來發射紅外線。 是要貼在程式哪裡
你之前說用這個sendRaw() 要三個參數
是改這行程式嗎?irsend.sendNEC(irKeyCodes[irKeyIndex], 32);
改了之後
sendRaw(irCode.32.38);//32是bits 38是IR
試過這行程式 可是會錯誤..
Q: 要貼在程式哪裏?
A: 就把 sendNEC() 換成 sendRaw() 呀。
像這樣:
irsend.sendRaw(irKeyCodes[irKeyIndex], 32, 38); // 發射紅外線訊號,第三個參數的 38 代表用 38 kHz
Keypad_TVRemote:75: error: invalid conversion from 'long int' to 'unsigned int*'
Keypad_TVRemote:75: error: initializing argument 1 of 'void IRsend::sendRaw(unsigned int*, int, int)'
他會出現這錯誤 好像是找不到Raw呢~~
sendRaw() 用法好像蠻特別的,跟 sendNEC(), sendSony() 這些不太一樣。
對阿 ~~還是找個有紅外線協定的來玩好了~~~謝謝了
IRRemote Library 裏 IRrecord 這個範例有示範 sendRaw() 的用法。
不過還挺複雜的。
大大 有問題要求救 幫我看這程式哪裡要修改
我現在是用srf05感測器來遙控電視
這個網址裡的最底那那一個執行程式
我跟他一樣用0018版本的arduino
麻煩你了 謝謝
會出現這錯誤
9: error: #include expects "FILENAME" or In function 'void loop()':
Bad error line: -4
http://luckylarry.co.uk/arduino-projects/arduino-redefining-the-tv-remote/
#include // 這裏要加 <IRremote.h>
IRsend irsend;
出現這錯誤~~
In function 'void loop()':
error: 'lt' was not declared in this scope At global scope:
我現在重開機載測一次是出現這不一樣的問題~~~
21: error: IRremote.h: No such file or directory In function 'void loop()':
Bad error line: -4
那個網站上貼的程式碼沒處理好,你自己要把大於、小於跟 logical and 的 html 換掉。
我已經改好了,可以編譯過關,你試看看:
http://goo.gl/Z13Bq
這支程式 code 內容在做什麼,你研究出來後,別忘了來分享喔。
大大太感謝了~~~~~~~~~我以為你不幫我解答了~"~
我現在馬上試 試好會做分享的~~謝謝
我在忙工作呢,一直在開會,實在是分身乏術
開會好累啊,我現在假日都在補眠,沒有空閒寫文章回留言說
你在研究上次提到的 sendRaw() 怎麼用嗎?
加油啊!期待你的分享。^o^
大大 完了~~~~照著用他的紅外線編碼raw的不行@@
用另一台電視NEC跟Sony協定的就不知道怎麼改了~
他的程式好像原本就是針對偵測不到紅線訊號用的~~
大大有什麼能建議的嗎?謝謝
Raw已經可以了 偵測到68個編碼要刪掉最前面那一個就可以了~~
只是頻道感測還要再改一下會比較好~~聲音的就比較穩!
現在就差NEC跟SONY的還沒測出來瞜~
不太懂你的意思耶
你是說已經可以用 sendRaw() 送出紅外線訊號了嗎?
所以,現在的問題是什麼?是不曉得它的協定是 NEC 還是 SONY 嗎?
測不到紅外線協定的 只要照著他又IRremote裡的dump範例來測紅外線訊號~~~測到(68)個編碼的話 只要把第一個編碼刪掉就可以遙控電視了~~~
一樣測的到紅外線協定 只是測不到他的紅外線協定的我照他他解說上面改就可以了~~~NEC的下午測也可以了照他上面改就可以 不用把協定改成NEC~一樣用SendRaw就可以了
只是SONY的應該要在+一些程式八
現在剩SONY沒辦法而已~~~大致上沒問題
想問大大他的程式是怎麼跑的~
沒有你的幫忙我現在也沒辦法遙控電視阿 ~~呵呵 謝謝
您好,我有一個keypad按下去任何鍵都對應不到任何pin,是不是要先通電給它?
Thanks
對應不到任何 pin ?
你是說還不確定 keypad 能不能動嗎?
要不要先照這篇的方法做試一下 keypad:
http://coopermaa2nd.blogspot.tw/2011/01/arduino-lab18-3x4-keypad.html
版主你好~
在這版上學到很多
關於上面aoaodi及版大所說明的 sendRaw()這個還是不太會用
#include
IRsend irsend;
const int buttonPin = 4; // 按鍵(pushbutton)接在 pin 4
int buttonState = 0;
// setup my arrays for each signal I want to send
unsigned int powerOn[76] = {900, -3250, 750, -500, 700, -550, 700, -500, 750, -500, 750, -500, 750, -500, 700, -550, 700, -500, 750, -550, 700, -550, 700, -500, 700, -550, 700, -550, 700,-1600, 700, -550, 700 ,-550 ,700, -500, 750, -500, 750, -500, 700, -550 ,700 ,-500, 750 ,-500, 750, -500 ,750 ,-500, 700, -1650 ,700, -500 ,700, -550, 700, -550 ,700, -500, 750, -500, 750, -500, 700, -550, 700 ,-550, 700 ,-500 ,750, -500 ,750, -500 ,700};
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
// 檢查按鍵是否被按下(pressed)
// 有的話,buttonState 會是 HIGH
if (buttonState == HIGH) {
// 發射紅外線訊號
irsend.sendRaw(powerOn,76, 38);
}
}
這是程式碼 發射之後在另一個arduino使用IRremote裡的dump範例測不到發射出來的紅外線碼
但是紅外線燈有亮 不知道問題出在哪
能麻煩撥空幫忙解答嗎
謝謝
經過爬文之後再測試
對於Unknown encoding的紅外線碼
只要在矩陣中將數值改為全部正值就可以發射
目前問題為如果是NEC的紅外線碼發射時用38Khz可以每次成功且穩定
如果是Unknown encoding 例如禾聯冷氣使用38KHz卻不能每次都成功
雖然成功機率頗大 但有人能幫忙解決嗎
你 NEC 的紅外線遙控器是什麼設備的?電視機? 冷氣,還是?
冷氣機的 code 通常都很長,不能成功很可能 buffer 太少的關係,因為 buffer 不足以保存全部的 code,建議把 buffer 加大一點試試
有加大試過 不過好像沒那麼單純
電器是冷氣
也許你可以用 PC 把 IR Code 整個錄製重播,先看看 IR code 有多長(我沒試過,不確定 work 不 work):
http://jumpjack.wordpress.com/2008/05/20/worlds-cheapest-remote-control-replicator-just-1/
前面發問的測試是要執行涵式庫附檔第一個範例做測試
這個範例收跟發原本有問題經過看板主的1-1下面留言發現
#define TIMER_DISABLE_INTR (TIMSK2 = 0)
這裡需要做更改
想請問版主怎麼知道要更改成=呢?
哦~ 那是去年在回網友小 B 有關同時發射與接收紅外線問題時發現的。
這個 bug 後來原作者也已經修正了: https://github.com/shirriff/Arduino-IRremote
了解哩~
謝謝版主解說!!
張貼留言