bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Haskell+Ubuntu Mate+Raspberry Pi (3)

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を加えないとエラーになる。