summaryrefslogtreecommitdiffstats
path: root/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
blob: f8ff3a00fd7a209246c0001c45d0ded7fc3fee59 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
\section{Funktioner och filer}

\subsection{System}
\label{app:funktioner och filer:system}

\texttt{choose\_position(position, segment, track, track\_len)} - Anropas när en
givare passerats. Gör en bedömning om en givare (eller flera) har missats genom
att kontrollera vilken givare som är närmast den nuvarande uppskattade position
och kompenserar om en givare bedöms ha missats. Se del~\ref{sec:missade givare}

\texttt{clamp(n, m, M)} - En hjälpfunktion som returnerar $n$ om $m < n < M$,
$m$ om $n < m$ och $M$ om $n > M$.

\texttt{detect\_missed(position, segment, track, track\_len)} - Returnerar true
om position ligger utanför det nuvarande segmentet.

\texttt{do\_boot(car, boot)} - Anropas en gång per programcykel i den så kallade
boostrap-fasen. Se del~\ref{sec:systembeskrivning:uppstart}.

\texttt{do\_car(car, t, display\_data, boot)} - Anropas en gång per programcykel
och innehåller ''Inhämtning av data'' och ''Behandling och sparande av data'' i
figur \ref{fig:flow}.  Se del~\ref{sec:systembeskrivning:korning}.

\texttt{do\_gov(car)} - Anropas varje gång en givare passerats. Vid målgivaren
jämförs referenstiden och den förra varvtiden och car.constant anpassas efter
differensen mellan dem. Om differensen är högre ändras car.constant mer, och
vice versa om differensen är låg. Vid givare 5 och 8 jämförs referenstiden och
en uppskattning av hur lång tid det nuvarande varvet troligen kommer ta. Se del~
\ref{sec:systembeskrivning:governor}.

\texttt{fit\_percents(percents, lap\_time, seg\_times)} - Anropas vid varje nytt
varv. Räknar ut den procentuella tiden varje segment tog det förra varvet och
sparar medelvärdet mellan den förra procentsatsen och den nya, uträknade
procentsatsen. Procentsatsen normeras sedan så summan är 1 (100 procent).

\texttt{format\_seg\_times(car)} - Anropas när körningen avslutas. Returnerar
den genomsnittliga tiden för varje segment.

\texttt{get\_approx\_v(cur\_seg, car)} - Anropas varje programcykel. Uppskattar
bilens nuvarande hastighet genom att dividera den senast uppmätta segmentstiden
med segmentets längd.

% \texttt{get\_new\_u(new\_v, seg\_constant} - FLYTTA BERÄKNINGEN TILL DO\_CAR,
% BEHÖVER INTE VARA EN EGEN FUNKTION

\texttt{get\_new\_v(position, list)} - Anropas varje programcykel. Söker igenom
bankartan och returnerar värdet v som matchar position.

\texttt{get\_position(approx\_v, prev\_p, delta\_t)} - Anropas varje
programcykel. Räknar ut hur långt bilen rört sig sedan senaste programcykeln.

% \texttt{get\_seg\_constant(position, lap\_constants, track, track\_len)} - TA
% BORT

\texttt{get\_time\_as\_string(millis)} - Omvandlar en mängd millisekunder till
formatet "mm:ss.s". Till exempel omvandlas 1250 millisekunder till "00:01.3" och
11240 millisekunder till "00:11.2".

\texttt{main.m} - Huvudskriptet som startar hela systemet. Det script som
programmet ligger i. I main.m ligger alla funktioner. Det är denna fil som ska
startas vid systemuppstart, se appendix~\ref{app:handhavande}


\subsection{Display}
\label{app:funktioner och filer:display}

\texttt{bar\_graph(direction, no, x1, x2, y1, y2, start\_value, end\_value,
type, pattern)} - Skapar ett stapeldiagram med ett hörn i \texttt{(x1, y1)} och
ett diagonellt hörn i \texttt{(x2, y2)}. \texttt{direction} är en av 'O', 'U',
'L' och 'R' och bestämmer åt vilket håll "upp" är på stapeln. 'O' står för upp
('oben' på tyska), 'U' står för ner ('unter'), 'L' står för vänster ('links')
och 'R' står för höger ('rechts'). Värdet stapeldiagrammet ska visa specifieras
med \texttt{update\_bar\_graph}. \texttt{start\_value} och \texttt{end\_value}
bestämmer vad som ska vara noll- respektive maxvärde för stapeldiagrammet.
\texttt{no} är stapeldiagrammets nummer och behöver specifieras när
stapeldiagrammets värde ska uppdateras. \texttt{type} sätts till 0 för en enkel
stapel och 1 för en stapel inuti en ram.

\texttt{clear\_display()} - Rensar displayen.

\texttt{continue\_line(x2, y2)} - Fortsätter en linje från den senast specifierade
linjens slut till \texttt{(x2, y2)}.

\texttt{draw\_line(x1, y1, x2, y2)} - Ritar en linje mellan \texttt{(x1, y1)} och
\texttt{(x2, y2)}.

\texttt{key(x1, y1, x2, y2, down\_code, up\_code, just, text)} - Skapar en
tryckbar knapp (till skillnad från en omkopplare, se \texttt{toggle()}) med
diagonella hörn i \texttt{(x1, y1)} och \texttt{(x1, y1)} och texten \texttt{text}. Hur
texten justeras beror på \texttt{just} där 'R' gör texten högerjusterad ('right'), 'C'
gör texten centerjusterad och 'L' gör texten vänsterjusterad ('left'). Om
knappen trycks ned läggs \texttt{down\_code} i displayens interna minne och om knappen
släpps läggs \texttt{up\_code} i displayens interna minne.

\texttt{point(x1, y1)} - Ritar en punkt i \texttt{(x1, y1)}. Punktens storlek kan
anpassas med \texttt{set\_point\_size}.

\texttt{put\_text(x, y, justification, text)} - Skriver texten \texttt{text} i
\texttt{(x, y)}. Hur texten justeras beror på \texttt{justification} där 'R' gör
texten högerjusterad ('right'), 'C' gör texten centerjusterad och 'L' gör texten
vänsterjusterad ('left'). Om \texttt{justification} är 'R' bestämmer \texttt{x}
och \texttt{x} textens övre högra koordinat, om \texttt{justification} är 'C'
bestämmer \texttt{x} och \texttt{x} textens mittre koordinat och om
\texttt{justification} är 'L' bestämmer \texttt{x} och \texttt{y} textens övre
vänstra koordinat.

set\_point\_size(n1, n2) - Sätter storleken på punkter och linjer som ritas ut.
\texttt{n1} är storleken i x-led (mellan 1 och 15 pixlar) och \texttt{n2} är
storleken i y-led (mellan 1 och 15 pixlar).

\texttt{toggle(x1, y1, x2, y2, down\_code, up\_code, just, text)} - Skapar en
tryckbar omkopplare (till skillnad från en knapp, se \texttt{key()}) med
diagonella hörn i \texttt{(x1, y1)} och \texttt{(x1, y1)} och texten
\texttt{text}. Hur texten justeras beror på *just* där 'R' gör texten
högerjusterad ('right'), 'C' gör texten centerjusterad och 'L' gör texten
vänsterjusterad ('left'). Om knappen aktiveras läggs \texttt{down\_code} i
displayens interna minne och om knappen avaktiveras läggs \texttt{up\_code} i
displayens interna minne.

\texttt{update\_bar\_graph(num, val)} - Skickar värdet \texttt{val} till
stapeldiagram \texttt{num}.