\documentclass[]{scrartcl}
\usepackage{geometry}
 \geometry{
 a4paper,
 top=18mm,
 bottom=19mm,
 }
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[pdftex,pdfa,hidelinks,breaklinks]{hyperref}
\usepackage{url}
\usepackage[affil-it]{authblk}


\date{\today}

\title{Discrete i/o - coffee machine model}
\author{A. Mirre}

\begin{document}
\affil{FAI UTB ve Zlíně, Softwarové inženýrství (SWI)}

\maketitle
\renewcommand{\contentsname}{Obsah}
\tableofcontents

\newpage

\section*{Zadanie}
\addcontentsline{toc}{section}{Zadání}

\begin{enumerate}
  \item Vytvorte program s využitím modelu práčky alebo miesiacej jednotky
  \begin{enumerate}
    \item využite všetky vstupy a výstupy modelu
    \item program bude mat sekvenčné správanie
    \item program by mal využívať displej
    \item kód by mal byť zrozumiteľný
  \end{enumerate}
\end{enumerate}

\subsection{Zdrojové kódy}
Kód programu je dostupný v git repozitári na adrese:\\
\url{https://git.dotya.ml/wanderer/proj_pls}\\
Kód dokumentácie je dostupný v git repozitári na adrese:\\
\url{https://git.dotya.ml/wanderer/proj_pls-docs}

\subsection{Disclaimer}
Nakoľko nemám k dispozícii vývojovú dosku, mojím jediným overením je v podstate
len základná syntaktická kontrola kódu pri preklade (po vzore KDS som si
vytvoril Makefile na zjednodušenie života).

\newpage

\section{Stavy programu}
Keďže je program riadený na základe aktuálneho stavu, musel som si ich
definovať.\\
Logicky som si rozčlenil beh na tieto hlavné stavy:
\begin{itemize}
  \item WAITING
  \item PREPARATION
  \item TANKFILLING
  \item MIXING
  \item SERVING
\end{itemize}

\subsection{WAITING}
Program v stave WAITING čaká na vstupy - stlačenia tlačidiel.\\
V tomto stave sa spracováva stlačenie tlačidla cukru, ktoré prepínaním stavu\\
HOWMUCHSUGAR nastavuje hodnoty hladiny cukru od málo po veľa cukru (4 úrovne)
(nestlačenie tohto tlačidla znamená, že nápoj bude bez cukru).\\

\subsection{PREPARATION}
Vyššie spomenuté je ďalej spracovávané vo funkcii \texttt{handlepreparation()} pomocou
troch \texttt{switch}-ov - a to pre množstvo cukru, silu aj veľkosť kávového
nápoja.\\
Úrovne cukru: nič, trocha, viac alebo najviac.\\
Úrovne sily kávy: WEAK, MED, STRONG.\\
Úrovne veľkosti kávy: (L/S ako large alebo small)\\
\\
Keď v \texttt{switch}-i vyhodnotíme používateľskú voľbu, voláme vlastné funkcie,
kde sa sleduje, či na pinoch pripojených na senzor evidujeme, čo chceme (alias sypeme
cukor \textit{po} úroveň, dolejeme do ďalšej nádrže vodu po nejakú úroveň, do
ďalšej nádrže (TANK) dosypeme kávový koncentrát po stanovenú úroveň.

\subsection{TANKFILLING}
Keďže sme naplnili nádrže s vodou, cukrom a kávovou zmesou po požadované
hodnoty, prejdeme na ďalší stav a naplníme hlavý TANK, kde prebieha zmiešavanie
všetkých ingrediencií. Tento stav mohol byť tiež vhodnejšie pomenovaný
MIXTANKFILLING.

\subsection{MIXING}
V stave MIXING spustíme mixér, počkáme pár chvíľ a vypneme mixér (nechceme
predsa shake).

\subsection{SERVING}
V stave SERVING sa obsah nádrže, kde prebiehalo zmiešavanie, vypustí otvorením
ventilu SV5 do imaginárneho pohára. Pre istotu ventil po krátkom čase
zatvoríme, aby sa nestalo, že pri príprave ďalšieho nápoja by bol otvorený a
jednotlivé zmesy by sa bez zmiešania vyliali/vysypali priamo do pohára.

\newpage
\section{Záver}
Pri práci na tomto projekte som si precvičil prácu s GPIO pinmi a mal som
možnosť premyslieť si a pokúsiť sa implementovať návrh zjednodušeného automatu
na kávu (na zákl. modelu mísící jednotka).

\end{document}
