在 C 語言中,我們用 bit operators (位元運算子) 處理位元的運算 (Bitwise operation):
使用巨集會讓程式比較清晰易讀。在 avr-libc 函式中有個 _BV() 巨集,它接受一個數值參數而且會轉成適當的 bit mask (位元遮罩)。BV 是 Bit Value 的縮寫。
_BV() 巨集的定義為:
這允許我們這樣做:
一家烤肉萬家香,開放分享才會快樂
在 C 語言中,我們用 bit operators (位元運算子) 處理位元的運算 (Bitwise operation):
使用巨集會讓程式比較清晰易讀。在 avr-libc 函式中有個 _BV() 巨集,它接受一個數值參數而且會轉成適當的 bit mask (位元遮罩)。BV 是 Bit Value 的縮寫。
_BV() 巨集的定義為:
這允許我們這樣做:
底下是「不使用延遲的燈號閃爍程式(Blink without delay)」這篇的程式,它的功能是讓一顆燈號閃爍,每隔一秒切換一次燈號,而且不使用 delay() 延遲函式:
我們來把程式碼整理一下。
millis() 函式會回傳 Arduino 從開始執行程式一直到目前為止的千分之一秒數值(number of milliseconds),這個數值在大約 50 天後會溢位(overflow),屆時會從 0 開始計數。
底下是一支範例程式(millis.pde),程式邏輯很簡單,每間隔一秒印出一次 millis() 的回傳值:
下圖是程式執行結果:
練習用 millis() 函式來量測 button 被按了多久的時間。
這次所需的材料與接線跟「用 pulseIn() 量測 button 被按了多久」這篇的實驗是一樣的。
練習使用 attachInterrupt() 函式與外部中斷。在這個實驗中,你將利用 attachInterrupt() 函式設定中斷處理函式(Interrupt Service Routine, ISR),讓程式在 pin 2 產生外部中斷時自動執行 ISR。
練習用 pulseIn() 函式來量測 button 被按了多久的時間。
這篇是給 WinLIRC 進階使用者或開發者看的。
WinLIRC 內部有一個 TCP Server,跑在 port 8765 上,最多同時可以有 16 個 clients 跟它連線。每當成功解出遙控器一個按鈕的紅外線編碼的時候,TCP Server 就會送出一行 ASCII 字串給所有的 clients,字串裏描述被按下的按鈕為何。每行字串以換行字元 ('\n’) 作結尾。例如,client 可能會看到像這樣的字串:
00000000000cc03f 00 play BenQ.cfg
這行表示遙控器被按下按鈕 (play 鈕)。如果遙控器被按下一段時間(連發),client 可能會看到這樣的東西:
00000000000cc03f 01 play BenQ.cfg
00000000000cc03f 02 play BenQ.cfg
00000000000cc03f 03 play BenQ.cfg
00000000000cc03f 04 play BenQ.cfg
00000000000cc03f 05 play BenQ.cfg
00000000000cc03f 06 play BenQ.cfg
資料格式說明如下:
在閱讀這篇文章前,我假設你已經看過「WinLIRC 紅外線遙控電腦教學」這一系列的文章。
本篇將摘要介紹 WinLIRC 的軟體工具,你可以把這篇當做是 WinLIRC 的使用參考。
WinLIRC 軟體不需安裝,下載回來後把壓縮檔解開即可。下圖顯示 WinLIRC 的目錄結構:
▲ 我用的是 WinLIRC 0.8.7a
如你所見,WinLIRC 有下列這些工具:
底下將一一介紹這幾支工具。
這篇文章將教你用 WinLIRC Helper 來遙控電腦,透過一個簡單的例子示範 WinLIRC Helper 的使用方法。
在閱讀這篇文章前,我假設你已經看過「WinLIRC 紅外線遙控電腦教學」一文,而且也已經把電腦紅外線接收器連接到電腦上了。
我們的目標是把電腦當成一個數位相框,用遙控器來切換圖片的播放。
1) 請隨便找一支遙控器,然後參考「 1) 遙控器紅外線解碼」一文錄製遙控器按鈕的紅外線編碼,只要錄兩顆按鈕就好,一顆管它叫 left,用來切換上一張圖片,另一顆命名為 right,用來切換下一張圖片:
這篇是「1) 遙控器紅外線解碼」的第二部份。
你可以用 WinLIRC 附的 IRRecord.exe 工具來為你的遙控器進行紅外線解碼。IRRecord.exe 的語法為:
IRRecord.exe -d SerialDevice.dll ..\BenQ.cfg上列是使用 Serial 介面的紅外線接收器的指令,如果你用的是 Audio 介面的紅外線接收器,指令為:
IRRecord.exe -d AudioCapture.dll ..\BenQ.cfg當解碼工作完成後,解碼結果將儲存在與 IRRecord.exe 同一個資料夾下的 BenQ.cfg 檔中。
你想用紅外線遙控器遙控電腦嗎? 不用起身或下床,只要坐在沙發或躺在床上,拿起遙控器就可以遙控電腦,叫 Winamp 換歌、操作 KMPlayer 或 PPS 播放想看的電影或電視節目、把電腦當成數位相框來遙控,用遙控器操作 Powerpoint 簡報的播放,或者用遙控器命令電腦做任何你想做的事...,你想過這種舒服的日子嗎?有了 LIRC/WinLIRC 這個套件,就可以讓你美夢成真用遙控器來遙控電腦。
LIRC (Linux Infrared Remote Control)是一個 Linux 紅外線遙控套件,它可以用來為遙控器進行紅外線解碼與發射紅外線。LIRC 支援大部份的遙控器。那什麼是 WinLIRC 呢? 沒錯,正如你所猜想的,WinLIRC 就是 Windows 版的 LIRC。
這一系列的教學,將教你使用 WinLIRC 來遙控電腦。
練習用 Arduino 讀取 DMT DMARD03 三軸加速度計並透過 Serial port 把感測值印到電腦端。
這篇用的是利順精密(Domintech, DMT) 的 DMARD03 數位三軸加速度計(Accelerometer),在此要特別感謝彥陽科技 Johnny 與 Edison,謝謝你們提供我 DMARD03 模組。
用 IRremote 函式庫也可以做紅外線物體偵測,方法是用 IRremote 讓紅外線發射器 (IR LED) 產生 38 kHz 的脈波,然後用一般 38 kHz 的紅外線接收器來偵測訊號。
註: 在「紅外線物體偵測(1)」(反射型)和「紅外線物體偵測(2)」(遮光型)這兩篇的範例程式中,紅外線發射器(IR LED) 38 kHz 的脈波是利用 tone() 函式產生的。
線路的接法還是一樣,如下圖,把紅外線發射器串接一顆 100 歐姆的電阻接到 pin 3,然後把紅外線接收器接到 pin 2:
練習用光敏電阻切換電視頻道。在這個實驗裏,你將練習用 IRRemote 函式庫發射紅外線訊號,然後搭配兩顆光敏電阻來切換電視頻道,當發現左邊比較亮時,就控制電視切到上一個頻道,當發現右邊比較亮時,就控制電視切到下一個頻道。
在做這個實驗前,我假設:
練習製作一個電視紅外線遙控器。在這個實驗裏,你將練習用 IRRemote 函式庫發射紅外線訊號,然後搭配一個 Keypad 做出一個電視遙控器。預計製作的紅外線遙控器,其外觀如下: