module System.Hardware.Arduino.SamplePrograms.Button where
import Control.Monad.Trans (liftIO)
import System.Hardware.Arduino
button :: IO ()
button :: IO ()
button = Bool -> FilePath -> Arduino () -> IO ()
withArduino Bool
False FilePath
"/dev/cu.usbmodemFD131" forall a b. (a -> b) -> a -> b
$ do
Pin -> PinMode -> Arduino ()
setPinMode Pin
led PinMode
OUTPUT
Pin -> PinMode -> Arduino ()
setPinMode Pin
pb PinMode
INPUT
forall {b}. Bool -> Arduino b
go forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Pin -> Arduino Bool
digitalRead Pin
pb
where pb :: Pin
pb = Word8 -> Pin
digital Word8
2
led :: Pin
led = Word8 -> Pin
digital Word8
13
go :: Bool -> Arduino b
go Bool
s = do forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FilePath -> IO ()
putStrLn forall a b. (a -> b) -> a -> b
$ FilePath
"Button is currently " forall a. [a] -> [a] -> [a]
++ if Bool
s then FilePath
"ON" else FilePath
"OFF"
Pin -> Bool -> Arduino ()
digitalWrite Pin
led Bool
s
Bool -> Arduino b
go forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Pin -> Arduino Bool
waitFor Pin
pb