liveplot-0.0.1: src/Graphics/Liveplot/Demo.hs
module Graphics.Liveplot.Demo where
import MVC
import qualified MVC.Prelude as MVC
import qualified Pipes.Prelude as Pipes
import Control.Concurrent (threadDelay)
import Graphics.Liveplot
runDemo :: IO()
runDemo = runLiveplot demo
demo :: Managed (View (Either (SensorReading GLfloat) GLApp),
Controller (Either (SensorReading GLfloat) Event))
demo = do
let inits = [ lineGraph "adc" (2, 1) (0, 0)
, lineGraph "dac" (2, 1) (1, 0)]
(v, c) <- ogl inits
dat <- MVC.producer (bounded 1) (sinedata 5 10 >-> named "adc")
dat2 <- MVC.producer (bounded 1) (sinedata 100 10 >-> named "dac")
return (v, fmap Left (dat <> dat2) <> fmap Right c)
sinedata :: Float -> Float -> Producer GLfloat IO ()
sinedata hz divider =
hztick hz
>-> Pipes.map ((/2). (+1) . (sin) . (/divider))
moiredata :: Float -> Producer GLfloat IO ()
moiredata hz =
hztick hz
>-> Pipes.map ((/2). (+1) . (sin) . (/2))
hztick :: (Num t, RealFrac t1) => t1 -> MVC.Proxy x' x () t IO b
hztick hz = run 0
where
run n = yield n >> (lift $ threadDelay $ floor $ 1000000/hz) >> run (n+1)