diff --git a/docs/build.py b/docs/build.py index fa3c90e..d16b26b 100644 --- a/docs/build.py +++ b/docs/build.py @@ -1,12 +1,28 @@ import glob import os +from pathlib import PurePath +import sys # https://tex.stackexchange.com/questions/101717/converting-markdown-to-latex-in-latex/246871#246871 +remove_testmodules = True +if len(sys.argv) >= 2: + remove_testmodules = False + outfilename = '/tmp/out.md' with open(outfilename, 'w') as outfile: - for filepath in glob.iglob('../src/modules/*/doc/index.md'): + all_modules = sorted(glob.glob('../src/modules/*/doc/index.md')) + if remove_testmodules: + all_modules = [p for p in all_modules if 'testmodule_' not in p] + without_info = [p for p in all_modules if "info_" not in p] + only_info = [p for p in all_modules if "info_" in p] + for filepath in without_info: with open(filepath) as infile: outfile.write(infile.read()) outfile.write("\n\\newpage{}\n") -os.system(f"pandoc --from=markdown --output=docs.pdf {outfilename} --highlight-style=espresso") + outfile.write("\n\\part{Appendix}\\newpage\n") + for filepath in only_info: + with open(filepath) as infile: + outfile.write(infile.read()) + outfile.write("\n\\newpage{}\n") +os.system(f"pandoc --from=markdown --template=template.tex --output=docs.pdf prefix.yaml {outfilename} --highlight-style=espresso") diff --git a/docs/images/puzzle_maze/description.png b/docs/images/puzzle_maze/description.png new file mode 100644 index 0000000..1f3bc1e Binary files /dev/null and b/docs/images/puzzle_maze/description.png differ diff --git a/docs/images/puzzle_maze/maze.png b/docs/images/puzzle_maze/maze.png new file mode 100644 index 0000000..913bff0 Binary files /dev/null and b/docs/images/puzzle_maze/maze.png differ diff --git a/docs/prefix.yaml b/docs/prefix.yaml new file mode 100644 index 0000000..a795528 --- /dev/null +++ b/docs/prefix.yaml @@ -0,0 +1,11 @@ +--- +title: OBUS handleiding +author: Zeus WPI +papersize: a4 +documentclass: scrartcl +geometry: "left=2cm,right=2cm,top=2cm,bottom=3cm" +fontsize: 14pt +--- + +\graphicspath{ {./images/} } +\newpage{} diff --git a/docs/template.tex b/docs/template.tex new file mode 100644 index 0000000..19ecaa5 --- /dev/null +++ b/docs/template.tex @@ -0,0 +1,552 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +$endif$ +$if(dir)$ +$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$ +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(lang)$ + $babel-lang$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} + +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +\usepackage{amsmath,amssymb} +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \textormath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\ifPDFTeX + \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} +\else + \catcode`^^^^200c=\active + \protected\def ^^^^200c{\zerowidthnonjoiner} +\fi +%% End of ZWNJ support +$endif$ +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor={$if(linkcolor)$$linkcolor$$else$Maroon$endif$}, + filecolor={$if(filecolor)$$filecolor$$else$Maroon$endif$}, + citecolor={$if(citecolor)$$citecolor$$else$Blue$endif$}, + urlcolor={$if(urlcolor)$$urlcolor$$else$Blue$endif$}, +$else$ + hidelinks, +$endif$ + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +$-- also used for underline +\usepackage[normalem]{ulem} +% Avoid problems with \sout in headers with hyperref +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newlength{\cslentryspacingunit} % times entry-spacing +\setlength{\cslentryspacingunit}{\parskip} +\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing + {% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \let\oldpar\par + \def\par{\hangindent=\cslhangindent\oldpar} + \fi + % set entry spacing + \setlength{\parskip}{#2\cslentryspacingunit} + }% + {} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifXeTeX + % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[$for(polyglossia-lang.options)$$polyglossia-lang.options$$sep$,$endfor$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$for(polyglossia-otherlangs.options)$$polyglossia-otherlangs.options$$sep$,$endfor$]{$polyglossia-otherlangs.name$} +$endfor$ +\else + \usepackage[$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\fi +$endif$ +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +$if(dir)$ +\ifXeTeX + % Load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifPDFTeX + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + + +\usepackage{wrapfig} + +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/moana/index.html b/moana/index.html index 4833628..119e4e8 100644 --- a/moana/index.html +++ b/moana/index.html @@ -183,6 +183,12 @@ pre { + + 0 + Zeus WPI + Doolhof + + 255 private use diff --git a/src/modules/info_serial_number/doc/index.md b/src/modules/info_serial_number/doc/index.md index bb7be81..ca4c21c 100644 --- a/src/modules/info_serial_number/doc/index.md +++ b/src/modules/info_serial_number/doc/index.md @@ -1,8 +1,4 @@ -## Serial number +# Appendix A: Serienummer -This module provides a serial number for other modules to use. It consists of -7 random letters/digits that are shown on a LCD display. The serial number has -at least one digit and one letter. - -### Credits -Module developed by redfast00. +Het serienummer bestaat uit 7 willekeurige letters/cijfers, en bevat ten minste +één cijfer en één letter. Het wordt op een LCD-scherm getoond. diff --git a/src/modules/needy_testmodule_buttons/doc/index.md b/src/modules/needy_testmodule_buttons/doc/index.md index 56142da..26af886 100644 --- a/src/modules/needy_testmodule_buttons/doc/index.md +++ b/src/modules/needy_testmodule_buttons/doc/index.md @@ -1,6 +1,3 @@ -## Testmodule needy buttons +# Testmodule needy buttons -If the module starts making a sound, press the button. - -### Credits -Module developed by redfast00. +Als de module geluid maakt, druk op de knop. diff --git a/src/modules/puzzle_maze/3d/.gitignore b/src/modules/puzzle_maze/3d/.gitignore new file mode 100644 index 0000000..1567411 --- /dev/null +++ b/src/modules/puzzle_maze/3d/.gitignore @@ -0,0 +1 @@ +*.stl diff --git a/src/modules/puzzle_maze/3d/case.scad b/src/modules/puzzle_maze/3d/case.scad new file mode 100644 index 0000000..ab71cdf --- /dev/null +++ b/src/modules/puzzle_maze/3d/case.scad @@ -0,0 +1,117 @@ +led_display_size=32; +led_display_total_size=50; +border_clearance = 10; +front_panel_thickness=2; +button_size=12; +button_clearance=1.5; +cut=50; +button_under_size=button_size+3; +button_under_thickness=2; +container_wall_thickness=1; +$fn=50; + +front_panel_height=border_clearance + led_display_size + 3 * button_under_size + 4 + border_clearance/4; +front_panel_width=border_clearance + led_display_size + border_clearance; + +module ccube(size = [1,1,1], center = false) +{ + sz = (len(size) == 3)?size:[size,size,size]; + if (len(center) == 1) + cube(size, center); + else + translate([center[0]?-sz[0]/2:0,center[1]?-sz[1]/2:0,center[2]?-sz[2]/2:0]) + cube(size); +} + +module button() { + color([1, 0.5, 0]) difference() { + union() { + translate([0, 0, -front_panel_thickness]) cylinder(d=button_size, h=front_panel_thickness+button_under_thickness, $fn=3); + translate([0, 0, -front_panel_thickness]) cylinder(d=button_under_size, h=button_under_thickness, $fn=3); + } + translate([0, 0, -front_panel_thickness -0.2]) cylinder(d=3.55, h=1); + } +} + +module front_panel() { + difference() { + union() { + ccube([front_panel_height, front_panel_width, front_panel_thickness], center=[0, 1, 0]); + translate([0, 0, -4]) { + translate([container_wall_thickness, -front_panel_width/2 + container_wall_thickness]) cube(5); + translate([container_wall_thickness, front_panel_width/2 - container_wall_thickness - 5]) cube(5); + translate([front_panel_height-container_wall_thickness-5, -front_panel_width/2 + container_wall_thickness]) cube(5); + translate([front_panel_height-container_wall_thickness-5, front_panel_width/2 - container_wall_thickness - 5]) cube(5); + } + } + translate([0, 0, -1]) union() { + translate([border_clearance, 0, 0]) ccube([led_display_size, led_display_size, cut], center=[0, 1, 0]); + %translate([border_clearance, 0, -12.6+1+front_panel_thickness]) ccube([50, led_display_size, 12.6], center=[0, 1, 0]); + up_button_trans=border_clearance+led_display_total_size+button_under_size/2+1; + // Up button + translate([up_button_trans, 0]) rotate([0, 0, 180]) { + translate([0, 0, 1]) %button(); + cylinder(d=button_size+button_clearance, h=cut ,$fn=3); + } + // Down button + translate([up_button_trans+(button_size+button_clearance), 0]) rotate([0, 0, 0]) { + translate([0, 0, 1]) %button(); + cylinder(d=button_size+button_clearance, h=cut ,$fn=3); + } + // Right button + translate([up_button_trans+(button_size+button_clearance)/2, button_size]) rotate([0, 0, 90]) { + translate([0, 0, 1]) %button(); + cylinder(d=button_size+button_clearance, h=cut ,$fn=3); + } + // Left button + translate([up_button_trans+(button_size+button_clearance)/2, -button_size]) rotate([0, 0, -90]) { + translate([0, 0, 1]) %button(); + cylinder(d=button_size+button_clearance, h=cut ,$fn=3); + } + } + } +} + +button_height=5; + +module back_panel() { + difference() { + union() { + ccube([front_panel_height, front_panel_width, 13+container_wall_thickness], center=[0, 1, 0]); + } + union() { + translate([container_wall_thickness, 0, container_wall_thickness]) ccube([front_panel_height-2*container_wall_thickness, front_panel_width-2*container_wall_thickness, cut], center=[0, 1, 0]); + translate([0, 0, -1]) { + translate([container_wall_thickness, -front_panel_width/2 + container_wall_thickness]) cube(5); + translate([container_wall_thickness, front_panel_width/2 - container_wall_thickness - 5]) cube(5); + translate([front_panel_height-container_wall_thickness-5, -front_panel_width/2 + container_wall_thickness]) cube(5); + translate([front_panel_height-container_wall_thickness-5, front_panel_width/2 - container_wall_thickness - 5]) cube(5); + } + translate([border_clearance+led_display_total_size, 0, -1]) cylinder(d=10, h=cut); + } + } + up_button_trans=border_clearance+led_display_total_size+button_under_size/2+1; + button_bottom_size=6; + pillar_height=13+container_wall_thickness - button_height - button_under_thickness; + // Up button + translate([up_button_trans, 0]) rotate([0, 0, 180+45]) { + cylinder(d=button_bottom_size, h=pillar_height, $fn=4); + } + // Down button + translate([up_button_trans+(button_size+button_clearance), 0]) rotate([0, 0, 45]) { + cylinder(d=button_bottom_size, h=pillar_height, $fn=4); + } + // Right button + translate([up_button_trans+(button_size+button_clearance)/2, button_size]) rotate([0, 0, 90+45]) { + cylinder(d=button_bottom_size, h=pillar_height, $fn=4); + } + // Left button + translate([up_button_trans+(button_size+button_clearance)/2, -button_size]) rotate([0, 0, -90+45]) { + cylinder(d=button_bottom_size, h=pillar_height, $fn=4); + } +} + + +// front_panel(); +// button(); +translate([0, 0, -13-container_wall_thickness]) back_panel(); diff --git a/src/modules/puzzle_maze/doc/index.md b/src/modules/puzzle_maze/doc/index.md new file mode 100644 index 0000000..699367b --- /dev/null +++ b/src/modules/puzzle_maze/doc/index.md @@ -0,0 +1,20 @@ +# Doolhof + +\begin{figure}[!b] + \centering + \includegraphics[width=24cm,height=5cm,keepaspectratio]{./puzzle_maze/description.png} +\end{figure} + + +- Zoek het juiste doolhof en oriëntatie van dit doolhof aan de hand van de cirkelvormige markeringen op de rand van de doolhofkaarten + +- Het knipperend licht in het doolhof is de bestemming, het licht dat blijft branden + is je karakter. Navigeer je karakter naar de bestemming met de gele knoppen, zonder + dat die door de muren van het doolhof gaat. Let wel, de ontmijner kan de muren niet zien! + + +## Doolhofkaarten + +\begin{center} + \includegraphics[width=10cm, height=10cm,keepaspectratio]{./puzzle_maze/maze.png} +\end{center} diff --git a/src/modules/puzzle_maze/graphics.svg b/src/modules/puzzle_maze/graphics.svg new file mode 100644 index 0000000..02beaa5 --- /dev/null +++ b/src/modules/puzzle_maze/graphics.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/puzzle_maze/puzzle_maze.ino b/src/modules/puzzle_maze/puzzle_maze.ino new file mode 100644 index 0000000..19d7c5c --- /dev/null +++ b/src/modules/puzzle_maze/puzzle_maze.ino @@ -0,0 +1,23 @@ +// (c) 2022, redfast00 +// See the LICENSE file for conditions for copying + +#include + +void setup() { + Serial.begin(115200); + obus_module::setup(OBUS_TYPE_PUZZLE, 0); +} + +obus_can::message message; + +void loop() { + bool is_message_valid = obus_module::loopPuzzle(&message, callback_game_start, callback_game_stop); +} + +void callback_game_start() { + +} + +void callback_game_stop() { + +} diff --git a/src/modules/puzzle_testmodule_buttons/doc/index.md b/src/modules/puzzle_testmodule_buttons/doc/index.md index e68cac5..0079f7f 100644 --- a/src/modules/puzzle_testmodule_buttons/doc/index.md +++ b/src/modules/puzzle_testmodule_buttons/doc/index.md @@ -1,6 +1,3 @@ -## Testmodule buttons +# Testmodule knoppen -If the blue LED is lit, press the green button, otherwise press the red button. - -### Credits -Module developed by redfast00. +Als de LED aan is, druk op de groene knop, anders op de rode knop.