aedf0b2f6dcc0b99b1e60202d600a31d8effb2c8
[phd-thesis.git] / intro / lst / blink.icl
1 module blink
2
3 import mTask.Interpret
4 import mTask.Interpret.Device.TCP
5 import iTasks.Extensions.DateTime
6 import StdEnv, iTasks
7
8 Start w = doTasks interactiveBlink w
9
10 interactiveBlink :: Task ()
11 interactiveBlink = enterDevice/*\label{lst:intro_enterDevice}*/
12 >>? \spec->withShared 500 \iInterval-> /*\label{lst:intro_withshared}*/
13 withDevice spec \dev-> /*\label{lst:intro_withdevice}*/
14 liftmTask (intBlink iInterval) dev/*\label{lst:intro_liftmtask}*/
15 -|| (Hint "Interval (ms)" @>> updateSharedInformation [] iInterval)/*\label{lst:intro_editor}*/
16 >>* [OnAction (Action "Stop") (always (return ()))]
17 where enterDevice :: Task TCPSettings
18 enterDevice = enterInformation [] <<@ Hint "Enter connection info"
19
20 intBlink :: (Shared sds Int) -> Main (MTask v Int)
21 | mtask, lowerSds v & RWShared sds & TC sds () Int Int
22 /*
23 intBlink :: (Shared sds Int) -> Main (MTask v Int) | mtask v & ...
24 */
25 intBlink iInterval =
26 declarePin D2 PMOutput \ledPin-> /*\label{lst:intro:declarePin}*/
27 lowerSds \mInterval=iInterval/*\label{lst:intro:liftsds}*/
28 In fun \blink=(\st-> /*\label{lst:intro:blink_fro}*/
29 getSds mInterval
30 >>=. \i->delay i
31 >>|. writeD ledPin st
32 >>|. blink (Not st))/*\label{lst:intro:blink_to}*/
33 In {main = blink true}/*\label{lst:intro:mtask_to}*/