2011年12月1日 星期四
Serial2Keystroke
先前我們提到 Arduino Uno Keyboard 可以讓 Arduino 透過 USB 介面送出按鍵敲擊動作 (keystroke) 給電腦,不過 Arduino Uno Keyboard 目前僅限 Uno 或 Mega 2560 的板子才能使用。假如我們用的是 Duemilanove 或是其它只能走 Serial 通訊的 Arduino 板子,這樣也可以辦得到嗎?答案是可以的。方法是這樣:
基本上這個解法分成兩個部份:
1) 要有一支 Arduino sketch,這支程式負責送字元到 serial port
2) 我們還要一支 Serial-to-Keystroke 的 PC 端工具,這支程式會讀取來自 serial port 上的資料並且負責把資料轉換成 keystrokes
聽起來有點玄嗎?事實上是很簡單的。
下載本文範例及工具
這篇提到的範例跟工具我全部打包好了,你可以點底下的連結下載:
Hello World
底下是一支很簡單的 Arduino sketch (senda.ino),它會每隔 1 秒鐘送出一個 "Hello World" 字串到 serial port:
請打開 Arduino IDE 把上面這支程式上傳到 Arduino 板子上。
2011年4月14日 星期四
4) 撰寫可以跟 WinLIRC TCP Server 溝通的程式
這篇是給 WinLIRC 進階使用者或開發者看的。
WinLIRC TCP Server
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
資料格式說明如下:
2008年10月20日 星期一
Singleton in SNIT(SNIT's Not Incr Tcl)
在 SNIT 中要怎麼實作 Singleton pattern 呢?可以參考這段程式:
package require snit
snit::type Singleton {
typevariable _instance {}
typeconstructor {
set _instance [Singleton %AUTO%]
}
constructor {args} {
if {$_instance != {}} {
error "Singleton can only be accessed through \"getInstance\""
}
}
typemethod getInstance {} {
return $_instance
}
}
2008年8月26日 星期二
SNIT(SNIT's Not Incr Tcl)
我寫了一篇 SNIT 筆記,筆記內容大部份是從 Snit FAQ 跟 Snit User Manual 中整理出來的。電子檔可在這個鏈結中取得:SNIT.pdf
註:SNIT(SNIT's Not Incr Tcl) 是 Tcl 的一套件物件系統,它是採 Component/Delegation (元件/委派)的 Object based model。Snit 所說的 data type 比較像 ada, algol 這類語言裡的 Abstract Data Type。