Route van Madeleine heen en terug langs wand.
  1.             predicates
  2.             heenEnWeer : (richting Route, real LinkerSensor, real MiddenSensor, real RechterSensor) -> string Command.
  3.             %@short Route is momentane status. L,M,R zijn gemeten waarden van linker,midden en rechtersensor
  4.             %@detail Aan de hand van deze input worden route en opdracht bepaald
  5.             %Bij de start wordt een nieuwe waarde voor zijwand vastgelegd.
  6.             %Bij tussenstop krijgt zijwandterug een waarde.
  7.             %Command is de string met nieuwe opdrachten voor het editscherm
  8.             %@end
  9.         clauses
  10.             % route: start
  11.             heenEnWeer(start, _L, _M, R) = "motoren 4 5\nadcr\nadc" :-
  12.                 %rechtuit
  13.                 %       _ = inverse(0),
  14.                 zijwand := R,
  15.                 route := heen,
  16.                 message:write("status start -> heen en rechtuit"),
  17.                 !.
  18.                 %-----------------------------------------------------------------------------------------------
  19.                 %route:heen zijwand=R
  20.        
  21.             heenEnWeer(heen, _L, M, R) = "motoren 4 5\nadcr\nadc" :-
  22.                 % rechtuit
  23.                 zijwand = R,
  24.                 M < stopvalue,
  25.                 route := heen,
  26.                 message:write("status heen -> heen en rechtuit"),
  27.                 !.
  28.        
  29.             heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
  30.                 % motoren aan om te keren
  31.                 zijwand = R,
  32.                 M >= stopvalue,
  33.                 route := keren,
  34.                 referenceTime := time::now(),
  35.                 message:write("status heen -> keren"),
  36.                 !.
  37.        
  38.             %zijwand < R
  39.             heenEnWeer(heen, _L, M, R) = "motoren 3 5\nadcr\nadc" :-
  40.                 % naar links
  41.                 zijwand < R,
  42.                 % stuurt op wand aan. Het verschil wordt kleiner
  43.                 M < stopvalue,
  44.                 route := heen,
  45.                 message:write("status heen -> heen en links"),
  46.                 !.
  47.        
  48.             heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
  49.                 % motoren aan om te keren
  50.                 zijwand < R,
  51.                 M >= stopvalue,
  52.                 route := keren,
  53.                 referenceTime := time::now(),
  54.                 message:write("status heen -> keren"),
  55.                 !.
  56.        
  57.             %zijwand > R
  58.             heenEnWeer(heen, _L, M, R) = "motoren 4 4\nadcr\nadc" :-
  59.                 % naar rechts
  60.                 zijwand > R,
  61.                 % stuurt van wand. Verschil wordt groter
  62.                 M < stopvalue,
  63.                 route := heen,
  64.                 message:write("status heen -> heen en rechts"),
  65.                 !.
  66.        
  67.             heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
  68.                 % motoren aan om te keren
  69.                 zijwand > R,
  70.                 % stuurt van wand. Verschil wordt groter
  71.                 M >= stopvalue,
  72.                 route := keren,
  73.                 referenceTime := time::now(),
  74.                 % starttime bij het keren
  75.                 message:write("status heen -> keren"),
  76.                 !.
  77.                 %-----------------------------------------------------------------------------------------------
  78.                 %route: keren
  79.                 %    heenEnWeer(keren,_L,_M,_R) = "motoren 0 0\nadcl" :-
  80.                 %        End = gmtTime::new(),
  81.                 %        I = timeInterval::new(referencetime,End),
  82.                 %        I:getIntervaldetailed(_,_,_,Sec),
  83.                 %        message:write("keren verstreken tijd: ",Sec," keertijd : ",keertijd,"\n"),
  84.                 %        Sec > keertijd,
  85.                 %        route := tussenstop,
  86.                 %        message:write("status keren -> tussenstop"),
  87.                 %        !.
  88.                 %%    heenEnWeer(keren,_L,_M,_R) = "motoren 0 -3" :-
  89.                 %        heenEnWeer(keren,_L,_M,_R) = "" :-
  90.                 %        %M >= 0.5,
  91.                 %        route := keren,
  92.                 %        message:write(predicate_name(),"status keren -> keren"),
  93.                 %        !.
  94.        
  95.             heenEnWeer(keren, _L, _M, _R) = "motoren 0 0\nadcl" :-
  96.                 End = time::now(),
  97.                 I = duration::new(referencetime, End),
  98.                 I:getIntervaldetailed(_, _, _, Sec),
  99.                 message:write("keren verstreken tijd: ", Sec, " keertijd : ", keertijd, "\n"),
  100.                 %  Sec > keertijd,
  101.                 T = timer1:getTickDuration(),
  102.                 keertijd - Sec < T / 1000,
  103.                 route := tussenstop,
  104.                 message:write("status keren -> tussenstop"),
  105.                 !.
  106.                 %    heenEnWeer(keren,_L,_M,_R) = "motoren 0 -3" :-
  107.        
  108.             heenEnWeer(keren, _L, _M, _R) = "" :-
  109.                 %M >= 0.5,
  110.                 route := keren,
  111.                 message:write(predicate_name(), "status keren -> keren"),
  112.                 !.
  113.                 %-----------------------------------------------------------------------------------------------
  114.                 % route: tussenstop
  115.                 % meet zijwand terug.
  116.        
  117.             heenEnWeer(tussenstop, L, _M, _R) = "motoren 0 0\nadcl\nadc" :-
  118.                 %  if L >= 0.5 then zijwandterug := L else zijwandterug := L end if,
  119.                 zijwandterug := L,
  120.                 route := terug,
  121.                 message:write("status tussenstop -> terug"),
  122.                 !.
  123.                 %-----------------------------------------------------------------------------------------------
  124.                 %route:heen zijwand=R
  125.        
  126.             heenEnWeer(terug, L, M, _R) = "motoren 4 5\nadcl\nadc" :-
  127.                 % rechtuit
  128.                 zijwandterug = L,
  129.                 M < stopvalue,
  130.                 route := terug,
  131.                 message:write("status terug -> terug en rechtuit"),
  132.                 !.
  133.        
  134.             heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
  135.                 % stoppen
  136.                 zijwandterug = L,
  137.                 M >= stopvalue,
  138.                 route := stop,
  139.                 %     referenceTime:= gmttime::new(),
  140.                 message:write("status terug -> stop"),
  141.                 !.
  142.        
  143.             %zijwand<R
  144.             heenEnWeer(terug, L, M, _R) = "motoren 4  4\nadcl\nadc" :-
  145.                 % naar rechts
  146.                 zijwandterug < L,
  147.                 % stuurt op wand aan. Het verschil wordt kleiner
  148.                 M < stopvalue,
  149.                 route := terug,
  150.                 message:write("status terug  -> terug en naar rechts"),
  151.                 !.
  152.        
  153.             heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
  154.                 % stop
  155.                 zijwandterug < L,
  156.                 M >= stopvalue,
  157.                 route := stop,
  158.                 %        referenceTime:= gmttime::new(),
  159.                 message:write("status terug -> stop"),
  160.                 !.
  161.        
  162.             %zijwand > R
  163.             heenEnWeer(terug, L, M, _R) = "motoren 3 5\nadcl\nadc" :-
  164.                 % naar links
  165.                 zijwandterug > L,
  166.                 % stuurt van wand. Verschil wordt groter
  167.                 M < stopvalue,
  168.                 route := terug,
  169.                 message:write("status terug -> terug en naar links"),
  170.                 !.
  171.        
  172.             heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
  173.                 % stop
  174.                 zijwandterug > L,
  175.                 % stuurt van wand. Verschil wordt groter
  176.                 M >= stopvalue,
  177.                 route := stop,
  178.                 %        referenceTime:= gmttime::new(), % starttime bij het keren
  179.                 message:write("status terug -> stop"),
  180.                 !.
  181.                 %-----------------------------------------------------------------------------------------------
  182.                 %route: stop
  183.        
  184.             heenEnWeer(stop, _, _, _) = "" :-
  185.                 commandsready := true,
  186.                 % timer1:stop,
  187.                 !.
  188.                 %-----------------------------------------------------------------------------------------------
  189.                 % error
  190.        
  191.             heenEnWeer(_, _, _, _) = "motoren 0 0".