hArduino-0.4: System/Hardware/Arduino/SamplePrograms/PulseOut.hs
-------------------------------------------------------------------------------
-- |
-- Module : System.Hardware.Arduino.SamplePrograms.PulseOut
-- Copyright : (c) Levent Erkok
-- License : BSD3
-- Maintainer : erkokl@gmail.com
-- Stability : experimental
--
-- Demonstrates the use of pulseOut
-------------------------------------------------------------------------------
module System.Hardware.Arduino.SamplePrograms.PulseOut where
import Control.Monad (forever)
import Control.Monad.Trans (liftIO)
import System.Hardware.Arduino
-- | Send pulses on a led as requested by the user. Note that the timing is computed
-- on the host side, thus the duration of the pulse is subject to some error due to
-- the Firmata communication overhead.
--
-- Wiring: Simply a led on pin 13:
--
-- <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Blink.png>>
pulseDemo :: IO ()
pulseDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
setPinMode led OUTPUT
digitalWrite led False
forever trigger
where led = digital 13
trigger = do liftIO $ putStr "Pulse duration? (microseconds) "
d <- liftIO getLine
case reads d of
[(v, "")] -> pulseOut_hostTiming led True 0 v
_ -> liftIO $ putStrLn "Please enter a number."