8.Haskellラッパー
wiringPiの実装が終了したので、HaskellからRaspberry PiのGPIOを利用できるようにするために、ラッパーを作成する。これには、Haskellの外部関数インタフェースを利用すればよい。
このインタフェースは、WiringHs.hsとして作成し、GitHubにアップロードしたので、ここを参照欲しい。
なお、このラッパーには、割り込み、スケジュールでの優先順位、Arduinoでの遅延(Delay)は含まれていない、これらは、Haskellのものを利用して欲しい。さらに、次の拡張のために、デバイスの情報をリストで管理する構造体wiringPiNodeStructが用意されているが、これも含まれてはいない。
なお、簡単なテストプログラムとして、LEDを点滅させるプログラムTestLed.hsを含めた。これは次のようになっている。
import WiringHs import System.IO import Control.Concurrent.Thread.Delay import Control.Monad pin = 4 main = do r <- wiringPiSetupGpio if (r == -1) then putStrLn "Error" else do pinMode pin output forM [1..10] $ \i -> do digitalWrite pin 0 delay 950000 digitalWrite pin 1 delay 50000 putStrLn "End" digitalWrite pin 0
点滅を10回繰り返すプログラムである。
なお、このプログラムのコンパイルは次のコマンドで行える。
ghc TestLed.hs -wiringPi -lpthread
なお、プログラムでは、スレッドを用いていないのだが、読みだすライブラリにpthreadを加えないとエラーになる。