\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}