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)