Route van Madeleine heen en terug langs wand.
predicates
heenEnWeer : (richting Route, real LinkerSensor, real MiddenSensor, real RechterSensor) -> string Command.
%@short Route is momentane status. L,M,R zijn gemeten waarden van linker,midden en rechtersensor
%@detail Aan de hand van deze input worden route en opdracht bepaald
%Bij de start wordt een nieuwe waarde voor zijwand vastgelegd.
%Bij tussenstop krijgt zijwandterug een waarde.
%Command is de string met nieuwe opdrachten voor het editscherm
%@end
clauses
% route: start
heenEnWeer(start, _L, _M, R) = "motoren 4 5\nadcr\nadc" :-
%rechtuit
% _ = inverse(0),
zijwand := R,
route := heen,
message:write("status start -> heen en rechtuit"),
!.
%-----------------------------------------------------------------------------------------------
%route:heen zijwand=R
heenEnWeer(heen, _L, M, R) = "motoren 4 5\nadcr\nadc" :-
% rechtuit
zijwand = R,
M < stopvalue,
route := heen,
message:write("status heen -> heen en rechtuit"),
!.
heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
% motoren aan om te keren
zijwand = R,
M >= stopvalue,
route := keren,
referenceTime := time::now(),
message:write("status heen -> keren"),
!.
%zijwand < R
heenEnWeer(heen, _L, M, R) = "motoren 3 5\nadcr\nadc" :-
% naar links
zijwand < R,
% stuurt op wand aan. Het verschil wordt kleiner
M < stopvalue,
route := heen,
message:write("status heen -> heen en links"),
!.
heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
% motoren aan om te keren
zijwand < R,
M >= stopvalue,
route := keren,
referenceTime := time::now(),
message:write("status heen -> keren"),
!.
%zijwand > R
heenEnWeer(heen, _L, M, R) = "motoren 4 4\nadcr\nadc" :-
% naar rechts
zijwand > R,
% stuurt van wand. Verschil wordt groter
M < stopvalue,
route := heen,
message:write("status heen -> heen en rechts"),
!.
heenEnWeer(heen, _L, M, R) = "motoren 0 -3" :-
% motoren aan om te keren
zijwand > R,
% stuurt van wand. Verschil wordt groter
M >= stopvalue,
route := keren,
referenceTime := time::now(),
% starttime bij het keren
message:write("status heen -> keren"),
!.
%-----------------------------------------------------------------------------------------------
%route: keren
% heenEnWeer(keren,_L,_M,_R) = "motoren 0 0\nadcl" :-
% End = gmtTime::new(),
% I = timeInterval::new(referencetime,End),
% I:getIntervaldetailed(_,_,_,Sec),
% message:write("keren verstreken tijd: ",Sec," keertijd : ",keertijd,"\n"),
% Sec > keertijd,
% route := tussenstop,
% message:write("status keren -> tussenstop"),
% !.
%% heenEnWeer(keren,_L,_M,_R) = "motoren 0 -3" :-
% heenEnWeer(keren,_L,_M,_R) = "" :-
% %M >= 0.5,
% route := keren,
% message:write(predicate_name(),"status keren -> keren"),
% !.
heenEnWeer(keren, _L, _M, _R) = "motoren 0 0\nadcl" :-
End = time::now(),
I = duration::new(referencetime, End),
I:getIntervaldetailed(_, _, _, Sec),
message:write("keren verstreken tijd: ", Sec, " keertijd : ", keertijd, "\n"),
% Sec > keertijd,
T = timer1:getTickDuration(),
keertijd - Sec < T / 1000,
route := tussenstop,
message:write("status keren -> tussenstop"),
!.
% heenEnWeer(keren,_L,_M,_R) = "motoren 0 -3" :-
heenEnWeer(keren, _L, _M, _R) = "" :-
%M >= 0.5,
route := keren,
message:write(predicate_name(), "status keren -> keren"),
!.
%-----------------------------------------------------------------------------------------------
% route: tussenstop
% meet zijwand terug.
heenEnWeer(tussenstop, L, _M, _R) = "motoren 0 0\nadcl\nadc" :-
% if L >= 0.5 then zijwandterug := L else zijwandterug := L end if,
zijwandterug := L,
route := terug,
message:write("status tussenstop -> terug"),
!.
%-----------------------------------------------------------------------------------------------
%route:heen zijwand=R
heenEnWeer(terug, L, M, _R) = "motoren 4 5\nadcl\nadc" :-
% rechtuit
zijwandterug = L,
M < stopvalue,
route := terug,
message:write("status terug -> terug en rechtuit"),
!.
heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
% stoppen
zijwandterug = L,
M >= stopvalue,
route := stop,
% referenceTime:= gmttime::new(),
message:write("status terug -> stop"),
!.
%zijwand<R
heenEnWeer(terug, L, M, _R) = "motoren 4 4\nadcl\nadc" :-
% naar rechts
zijwandterug < L,
% stuurt op wand aan. Het verschil wordt kleiner
M < stopvalue,
route := terug,
message:write("status terug -> terug en naar rechts"),
!.
heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
% stop
zijwandterug < L,
M >= stopvalue,
route := stop,
% referenceTime:= gmttime::new(),
message:write("status terug -> stop"),
!.
%zijwand > R
heenEnWeer(terug, L, M, _R) = "motoren 3 5\nadcl\nadc" :-
% naar links
zijwandterug > L,
% stuurt van wand. Verschil wordt groter
M < stopvalue,
route := terug,
message:write("status terug -> terug en naar links"),
!.
heenEnWeer(terug, L, M, _R) = "motoren 0 0\nrespond" :-
% stop
zijwandterug > L,
% stuurt van wand. Verschil wordt groter
M >= stopvalue,
route := stop,
% referenceTime:= gmttime::new(), % starttime bij het keren
message:write("status terug -> stop"),
!.
%-----------------------------------------------------------------------------------------------
%route: stop
heenEnWeer(stop, _, _, _) = "" :-
commandsready := true,
% timer1:stop,
!.
%-----------------------------------------------------------------------------------------------
% error
heenEnWeer(_, _, _, _) = "motoren 0 0".