elaborate on comm
[msc-thesis1617.git] / mtask.examples.tex
1 Some example \gls{mTask}-\glspl{Task} --- using almost all of their
2 functionality --- are shown in Listing~\ref{lst:exmtask}. The
3 \gls{mTask}-\glspl{Task} shown in the example do not belong to a particular
4 view and therefore are of the type \CI{View t r}. The \CI{blink} \gls{mTask}
5 show the classic \gls{Arduino} blinking led application that blinks a certain
6 \gls{LED} every second. The \CI{thermostat} expression will enable a digital
7 pin powering a cooling fan when the analog pin representing a temperature
8 sensor is too high. \CI{thermostat`} shows the same expression but now using
9 the assignment style \gls{GPIO} technique. The \CI{thermostat} example also
10 shows that it is not necessary to run everything as a \CI{task}. The main
11 program code can also just consist of the contents of the root \CI{main}
12 itself.
13
14 \begin{lstlisting}[%
15 label={lst:exmtask},caption={Some example \gls{mTask}-\glspl{Task}}]
16 blink = task \blink=(\x.
17 IF (x ==. lit True) (ledOn led) (ledOff led) :.
18 blink (lit 1000) (Not x)
19 In {main=blink (lit 1000) True}
20
21 thermostat :: Main (View () Stmt)
22 thermostat = {main =
23 IF (analogRead A0 >. lit 50)
24 ( digitalWrite D0 (lit True) )
25 ( digitalWrite D0 (lit False) )
26 }
27
28 thermostat` :: Main (View () Stmt)
29 thermostat` = let
30 a0 = aIO A0
31 d0 = dIO D0 in {main = IF (a0 >. lit 50) (d0 =. lit True) (d0 =. lit False) }
32 \end{lstlisting}