diff options
Diffstat (limited to 'Dokument/Teknisk Dokumentation/appendix/02-funktion.tex')
| -rw-r--r-- | Dokument/Teknisk Dokumentation/appendix/02-funktion.tex | 355 |
1 files changed, 95 insertions, 260 deletions
diff --git a/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex index 45d061d..20313af 100644 --- a/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex +++ b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex @@ -2,284 +2,119 @@ \subsection{System} \label{app:funktioner och filer:system} -choose\_position(position, segment, track, track\_len) -Körs 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 -\ref{sec:missade givare} +\texttt{choose\_position(position, segment, track, track\_len)} - Körs 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 \ref{sec:missade givare} -clamp(n, m, M) +\texttt{clamp(n, m, M)} - En hjälpfunktion som returnerar $n$ om $m < n < M$, +$m$ om $n < m$ och $M$ om $n > M$. -En hjälpfunktion som returnerar n om $m < n < M$, annars m om $n < m$, annars M -om $n > M$. +\texttt{detect\_missed(position, segment, track, track\_len)} - Returnerar true +om position ligger utanför det nuvarande segmentet. -detect\_missed(position, segment, track, track\_len) +\texttt{do\_boot(car, boot)} - Anropas en gång per programcykel i den så kallade +boostrap-fasen. Se \ref{sec:systembeskrivning:uppstart} för information. -Returnerar true om position ligger utanför det nuvarande segmentet. +\texttt{do\_car(car, t, displa\_data, boot)} - Anropas en gång per programcykel. +Se \ref{sec:systembeskrivning:korning} och EN ANNAN DEL AV TEXTEN (vadå?) för +information om hur en programcykel ser ut och NÅGOT MER (vadå?). -do\_boot(car, boot) +\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 +\ref{sec:systembeskrivning:governor} för mer information. -Anropas en gång per programcykel i den så kallade boostrap-fasen. Se -\ref{sec:systembeskrivning:uppstart} för information. +\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%). -do\_car(car, t, displa\_data, boot) +\texttt{format\_seg\_times(car)} - Anropas när körningen avslutas. Returnerar +den genomsnittliga tiden för varje segment. -Anropas en gång per programcykel. Se \ref{sec:systembeskrivning:korning} och EN ANNAN DEL -AV TEXTEN (vadå?) för information om hur en programcykel ser ut och NÅGOT MER -(vadå?). +\texttt{get\_aprox\_v(cur\_seg, car)} - Anropas varje programcykel. Uppskattar +bilens nuvarande hastighet genom att dividera den senast uppmätta segmentstiden +med segmentets längd. -do\_gov(car) +% \texttt{get\_new\_u(new\_v, seg\_constant} - FLYTTA BERÄKNINGEN TILL DO\_CAR, +% BEHÖVER INTE VARA EN EGEN FUNKTION -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 \ref{sec:systembeskrivning:governor} för -mer information. +\texttt{get\_new\_v(position, list)} - Anropas varje programcykel. Söker igenom +bankartan och returnerar värdet v som matchar position. -fit\_percents(percents, lap\_time, seg\_times) +\texttt{get\_position(aprox\_v, prev\_p, delta\_t)} - Anropas varje +programcykel. Räknar ut hur långt bilen rört sig sedan senaste programcykeln. -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%). +% \texttt{get\_seg\_constant(position, lap\_constants, track, track\_len)} - TA +% BORT -format\_seg\_times(car) +\texttt{get\_time\_as\_string(millis)} - Omvandlar en mängd millisekunder till +formatet "mm:ss.s". Till exempel omvandlas 1250 ms till "00:01.3" och 11240 till +"00:11.2". -Anropas när körningen avslutas. Returnerar den genomsnittliga tiden för varje -segment. - -get\_aprox\_v(cur\_seg, car) - -Anropas varje programcykel. Uppskattar bilens nuvarande hastighet genom att -dividera den senast uppmätta segmentstiden med segmentets längd. - -get\_new\_u(new\_v, seg\_constant - -FLYTTA BERÄKNINGEN TILL DO\_CAR, BEHÖVER INTE VARA EN EGEN FUNKTION - -get\_new\_v(position, list) - -Anropas varje programcykel. Söker igenom bankartan och returnerar värdet v som -matchar position. - -get\_position(aprox\_v, prev\_p, delta\_t) - -Anropas varje programcykel. Räknar ut hur långt bilen rört sig sedan senaste -programcykeln. - -get\_seg\_constant(position, lap\_constants, track, track\_len) - -TA BORT - -get\_time\_as\_string(millis) - -Omvandlar en mängd millisekunder till formatet "mm:ss.s". Till exempel omvandlas 1250 -ms till "00:01.3" och 11240 till "00:11.2". - -main.m - -Det script som programmet ligger i. I main.m ligger alla funktioner. -Det är denna fil som ska startas -vid systemuppstart, se \ref{app:handhavande} +\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 \ref{app:handhavande} \subsection{Display} \label{app:funktioner och filer:display} -bar\_graph(direction, no, x1, x2, y1, y2, start\_value, end\_value, type, pattern): - -Skapar ett stapeldiagram med ett hörn i (*x1*, *y1*) och ett diagonellt -hörn i (*x2*, *y2*). *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' på tyska), 'L' står för vänster -('links') och 'R' står för höger ('rechts'). Värdet stapeldiagrammet ska -visa specifieras med *update\_bar\_graph*. *start\_value* och -*end\_value* bestämmer vad som ska vara noll- respektive maxvärde för -stapeldiagrammet. *no* är stapeldiagrammets nummer och behöver -specifieras när stapeldiagrammets värde ska uppdateras. *type* sätts -till 0 för en enkel stapel och 1 för en stapel inuti en ram. - -box(x1, y1, x2, y2, n1) - -Ritar en rektangel med diagonella hörn i (*x1*, *y1*) och (*x2*, *y2*) -och mönster-nummer *n1*. - -clear\_display() - -Rensa displayen. - -continue\_line(x2, y2) - -Fortsätt en linje från den senast specifierade linjens slut till (*x2*, -*y2*). - -delete\_area(x1, y1, x2, y2) - -Ta bort (släck) alla pixlar i det rektangulära området mellan (*x1*, -*y1*) och (*x2*, *y2*). - -draw\_line(x1, y1, x2, y2) - -Rita en linje mellan (*x1*, *y1*) och (*x2*, *y2*). - -draw rectangle(x1, y1, x2, y2) - -Rita en rektangel (ej ifylld) mellan (*x1*, *y1*) och (*x2*, *y2*). - -fill\_area(x1, y1, x2, y2) - -Tänd alla pixlar i det rektangulära området mellan (*x1*, *y1*) och -(*x2*, *y2*). - -fill\_area\_with\_pattern(x1, y1, x2, y2, n1) - -Fyll det rektangulära området mellan (*x1*, *y1*) och (*x2*, *y2*) med -mönster *n1*. - -fill\_display() - -Tänd alla pixlar på displayen. - -flashing\_area(x1, y1, x2, y2) - -Fyll det rektangulära området mellan (*x1*, *y1*) och (*x2*, *y2*) med -blinkande pixlar. Blinkintervallet kan sättas med *set\_flashing\_time*. - -flashing\_area\_with\_pattern(x1, y1, x2, y2) - -Fyll det rektangulära området mellan (*x1*, *y1*) och (*x2*, *y2*) med -blinkande pixlar i ett mönster. Blinkintervallet kan sättas med -*set\_flashing\_time*. - -invert\_area(x1, y1, x2, y2) - -Tänd alla släckta pixlar och släck alla tända pixlar i det rektangulära -området mellan (*x1*, *y1*) och (*x2*, *y2*). - -invert\_display() - -Tänd alla släcka pixlar och släck alla tända pixlar på hela displayen. -key(x1, y1, x2, y2, down\_code, up\_code, just, text) - -Skapa en tryckbar knapp (till skillnad från en omkopplare, se -*toggle(...)*) med diagonella hörn i (*x1*, *y1*) och (*x2*, *y2*) och -texten *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 trycks ned läggs -*down\_code* i displayens interna minne och om knappen släpps läggs -*up\_code* i displayens interna minne. - -point(x1, y1) - -Rita en punkt i (*x1*, *y1*). Punktens storlek kan anpassas med -*set\_point\_size*. - -put\_text(x, y, justification, text) - -Skriv ut texten *text* i (*x*, *y*). Hur texten justeras beror på -*justification* där 'R' gör texten högerjusterad ('right'), 'C' gör -texten centerjusterad och 'L' gör texten vänsterjusterad ('left'). Om -*justification* är 'R' bestämmer *x* och *y* textens övre högra -koordinat, om *justification* är 'C' bestämmer *x* och *y* textens -mittre koordinat och om *justification* är 'L' bestämmer *x* och *y* -textens övre vänstra koordinat. - -redraw\_bar\_graph(num) - -Tvinga stapeldiagram *num* att ritas om. - -remove\_flashing\_area(x1, y1, x2, y2) - -Ta bort blinkade pixlar i det rektangulära området mellan (*x1*, *y1*) -och (*x2*, *y2*). - -request\_bar\_graph\_value(num) - -Lägg nuvarande värdet för stapeldiagram *num* i displayens interna -minne. - -restore\_display\_from\_clipboard() - -Flytta innehållet från displayens urklipp till displayen. - -restore\_display\_from\_clipboard\_to\_point(x1, y1) - -Flytta innehållet från displayens urklipp till displayen med övre -vänstra hörn i (*x1*, *y1*). Spara ett område med -\_save\_area\_to\_clipboard(...). - -save\_area\_to\_clipboard(x1, y1, x2, y2) - -Kopiera innehållet i den rektangel mellan (*x1*, *y1*) och (*x2*, *y2*) -till displayens urklipp. Återställ med -*restore\_display\_from\_clipboard\_to\_point(...)*. - -save\_display\_to\_clipboard() - -Kopiera displayens nuvarande innehåll till displayens urklipp. Återställ -med *restore\_display\_from\_clipboard()*. - -set\_display\_visible(visible) - -Sätt om displayen ska vara synlig (*visible* = true) eller om displayen -ska vara osynlig (*visible* = false). Att displayen är osynlig innebär -att innehållet inte syns men finns kvar i bakgrunden och kan visas igen -om *set\_display\_visible(true)* skickas. - -set\_drawing\_mode(n1) - -Sätt displayens ritläge. *n1* = 1 innebär att pixlar slås på eller av -(som vanligt) enligt kommandot som skickas, *n1* = 2 innebär att pixlar -enbart slås av (som ett suddgummi) och *n1* = 3 innebär att pixlar -inverteras (släckta pixlar slås på och tända pixlar stängs av) - -set\_flashing\_time(n1) - -Sätt intervallet blinkande objekt blinkar i. *n1* är ett intervall i -tiondelar av en sekund mellan 0,1 sekunder och 1,5 sekunder. - -set\_line\_pattern(n1) - -Sätt mönstret linjer ritas ut med. - -set\_point\_size(n1, n2) - -Sätt storleken på punkter och linjer som ritas ut. *n1* är storleken i -x-led (mellan 1 och 15 pixlar) och *n2* är storleken i y-led (mellan 1 -och 15 pixlar). - -set\_text\_flashing(n1) - -Sätt om ny text som skrivs ut ska blinka eller inte. *n1* = 1 slår på -blinkande och *n1* = 2 stänger av blinkande. - -set\_text\_font(font\_num) - -Sätt typsnittet på ny text som skrivs ut. Se *REF*(vadå?) för information om de -olika typsnitten. - -set\_text\_zoom(x\_scale, y\_scale) - -Sätt skalfaktorn för ny text som skrivs ut. *x\_scale* är skalfaktorn i -x-led (mellan x1 och x8) och *y\_scale* är skalfaktorn i y-led (mellan -x1 och x8). - -set\_touch\_sound\_response(state) - -Sätt om displayen ska göra ljud när knappar trycks ned. *state* = 1 slår -på ljudet och *state* = 0 stänger av ljudet. - -toggle(x1, y1, x2, y2, down\_code, up\_code, just, text) - -Skapa en tryckbar omkopplare (till skillnad från en knapp, se -*key(...)*) med diagonella hörn i (*x1*, *y1*) och (*x2*, *y2*) och -texten *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 *down\_code* -i displayens interna minne och om knappen avaktiveras läggs *up\_code* i +\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. -update\_bar\_graph(num, val) - -Skicka värdet *val* till stapeldiagram *num*. +\texttt{update\_bar\_graph(num, val)} - Skickar värdet \texttt{val} till +stapeldiagram *num*. |
