module System.Hardware.Arduino.SamplePrograms.Analog where
import Control.Monad (when)
import Control.Monad.Trans (liftIO)
import System.Hardware.Arduino
analogVal :: IO ()
analogVal :: IO ()
analogVal = Bool -> FilePath -> Arduino () -> IO ()
withArduino Bool
False FilePath
"/dev/cu.usbmodemFD131" (Arduino () -> IO ()) -> Arduino () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
Pin -> PinMode -> Arduino ()
setPinMode Pin
led PinMode
OUTPUT
Pin -> PinMode -> Arduino ()
setPinMode Pin
pot PinMode
ANALOG
Int
cur <- Pin -> Arduino Int
analogRead Pin
pot
IO () -> Arduino ()
forall a. IO a -> Arduino a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Arduino ()) -> IO () -> Arduino ()
forall a b. (a -> b) -> a -> b
$ Int -> IO ()
forall a. Show a => a -> IO ()
print Int
cur
Int -> Arduino ()
forall {b}. Int -> Arduino b
go Int
cur
where led :: Pin
led = Word8 -> Pin
digital Word8
13
pot :: Pin
pot = Word8 -> Pin
analog Word8
3
go :: Int -> Arduino b
go Int
cur = do Pin -> Bool -> Arduino ()
digitalWrite Pin
led Bool
True
Int -> Arduino ()
delay Int
cur
Pin -> Bool -> Arduino ()
digitalWrite Pin
led Bool
False
Int -> Arduino ()
delay Int
cur
Int
new <- Pin -> Arduino Int
analogRead Pin
pot
Bool -> Arduino () -> Arduino ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
cur Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
new) (Arduino () -> Arduino ()) -> Arduino () -> Arduino ()
forall a b. (a -> b) -> a -> b
$ IO () -> Arduino ()
forall a. IO a -> Arduino a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Arduino ()) -> IO () -> Arduino ()
forall a b. (a -> b) -> a -> b
$ Int -> IO ()
forall a. Show a => a -> IO ()
print Int
new
Int -> Arduino b
go Int
new