<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=State-machine</id>
	<title>State-machine - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=State-machine"/>
	<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=State-machine&amp;action=history"/>
	<updated>2026-04-19T21:29:09Z</updated>
	<subtitle>Versionshistorie for denne side i Holstebro HTX Wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=State-machine&amp;diff=1368&amp;oldid=prev</id>
		<title>Bar: /* Implementering i JAL */</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=State-machine&amp;diff=1368&amp;oldid=prev"/>
		<updated>2022-10-12T08:00:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Implementering i JAL&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 12. okt. 2022, 10:00&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l110&quot;&gt;Linje 110:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linje 110:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der er ligeledes understøttet en visning i Serial monitor&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der er ligeledes understøttet en visning i Serial monitor&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Implementering i JAL==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Her er der et forslag til hvordan den beskrevne state-machine er blevet implementeret pakket i en [[Media:state.zip|ZIP-fil]].&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I implementeringen anvender jeg [[AD-tast]]-modulet til indtastning af tal - det kunne lige så godt gøres med [[RC-tast]] eller med simple kontakter for demoformålet. Til visningen har jeg anvendt [[ALCD]]-modulet med et 2 x 16 karakters display - det kunne selvfølgelig også være et 2 x 8, hvor man så begrænsede teksten, eller helt simpelt kunne man få noget ud på nogle lysdioder.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Der er ikke lavet nogen regulering, men der er 3 forskellige display-visninger, alt efter hvilket state den befinder sig i.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Den øverste linie i displayet skifter alt efter hvilket state den er i, og den nederste linie er anvendt til debug-oplysninger, med state og timeout-counter&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I hvile-tilstanden er der bare en udlæsning af et AD-tal. Man kan forbinde et potentiometer til den aktuelle kanal, og se at tallet følger spændingen på indgangen. visningen er som følger:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; AD nnnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ST x T nnnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I Indtastnings-tilstanden er visningen:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; SET  nnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ST x T nnnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I Indtastnings-tilstanden er visningen:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; SETPOINT  nnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ST x T nnnn&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tasterne med # og * har den beskrevne opførsel.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I indtastningen timeoutes efter 20 sekunder&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I visningen af setpunktet timeoutes efter 2 sekunder&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori: Program-klassikere]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori: Program-klassikere]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori: Software-beskrivelse]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori: Software-beskrivelse]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=State-machine&amp;diff=1365&amp;oldid=prev</id>
		<title>Bar: Oprettede siden med &quot;En god metode til at holde styr på hvad en PIC skal lave i forskellige situationer er ved at etablere det der i softwaren kaldes for en state-machine.  ==Princippet== Det grundlæggende princip i en state-machine er, at den kan være i en række tilstande, alt afhængigt af hvad programmet er i gang med at udføre, og at en række hændelser kan få den til at skifte tilstand.  En state-machine fungerer godt sammen med et simpelt styresystem, der er etablere med e...&quot;</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=State-machine&amp;diff=1365&amp;oldid=prev"/>
		<updated>2022-10-12T07:57:52Z</updated>

		<summary type="html">&lt;p&gt;Oprettede siden med &amp;quot;En god metode til at holde styr på hvad en PIC skal lave i forskellige situationer er ved at etablere det der i softwaren kaldes for en state-machine.  ==Princippet== Det grundlæggende princip i en state-machine er, at den kan være i en række tilstande, alt afhængigt af hvad programmet er i gang med at udføre, og at en række hændelser kan få den til at skifte tilstand.  En state-machine fungerer godt sammen med et simpelt &lt;a href=&quot;/index.php/Styresystem&quot; title=&quot;Styresystem&quot;&gt;styresystem&lt;/a&gt;, der er etablere med e...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;En god metode til at holde styr på hvad en PIC skal lave i forskellige situationer er ved at etablere det der i softwaren kaldes for en state-machine.&lt;br /&gt;
&lt;br /&gt;
==Princippet==&lt;br /&gt;
Det grundlæggende princip i en state-machine er, at den kan være i en række tilstande, alt afhængigt af hvad programmet er i gang med at udføre, og at en række hændelser kan få den til at skifte tilstand.&lt;br /&gt;
&lt;br /&gt;
En state-machine fungerer godt sammen med et simpelt [[styresystem]], der er etablere med et hurtigt [[Forever Loop]].&lt;br /&gt;
&lt;br /&gt;
En god måde at dokumentere en state-machine på er ved at starte med et tilstands-diagram, hvor en række boller illustrerer de forskellige tilstande som state-machinen kan være i, og pilene mellem bollerne illustrerer hvordan man kan komme mellem de forskellige tilstande, og hvad det er der skal til for at få den til at skifte tilstand (teksten ved pilene)&lt;br /&gt;
&lt;br /&gt;
==Eksempel på state-machine==&lt;br /&gt;
Et godt eksempel til at illustrere hvordan en state-machine kan fungere er typisk noget med indtastning og visning af noget i et display.&lt;br /&gt;
&lt;br /&gt;
[[Image:State-diagram.png|right|thumb|Eksempel på State-machine]]&lt;br /&gt;
&lt;br /&gt;
Den viste state-machine skal kunne vise en aktuel temperatur, indtaste et nyt setpunkt, og vise hvad det aktuelle setpunkt er. Systemet skal samtidigt kunne håndtere en temperatur-regulering.&lt;br /&gt;
&lt;br /&gt;
En god måde at starte state-machinen er ved at definere en hvile-tilstand, og i dette tilfælde vil det være rimeligt, at visningen i hviletilstanden er den aktuelle temperatur. Det kan måske også være praktisk allerede på nuværende tidspunkt at definere om temperatur-reguleringen kun skal foregå når den er i hvile-tilstand, eller om det også skal ske i de andre tilstande. Jeg vil her vælge at der kun skal reguleres i hvile-tilstanden.&lt;br /&gt;
&lt;br /&gt;
===Indtastning af setpunkt===&lt;br /&gt;
&lt;br /&gt;
Hvis man vil indtaste et nyt setpunkt, så skal man fra hvile-tilstanden taste #-tasten, så man kommer ind i tilstanden med indtastning af setpunkt.&lt;br /&gt;
&lt;br /&gt;
Inde i den tilstand sker selve indtastningen af tallet der skal være det nye setpunkt, og som state-machinen er defineret kan man kun taste cifre, og så skal man afslutte med #-tasten, hvorved man kommer over i visningen af setpunktet.&lt;br /&gt;
&lt;br /&gt;
Der er en anden mulighed for at komme ud af indtastningen på, nemlig ved timeout. Den mulighed er indført for at man ikke skal kunne blive hængende i indtastningen, uden at man kommer tilbage og regulerer på temperaturen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der er ikke defineret hvor lang timeout skal være, men den skal være fornuftig lang, så brugeren har god tid til at orientere sig på tastaturet, og det kan også være en god ide at tiden nulstilles hver gang brugeren indtaster et nyt ciffer. Et rimeligt timeout kunne være 5 - 10 sekunder.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der er heller ikke defineret hvad der skal ske med setpunktet, hvis der kommer timeout, men det ville sikkert være bedst om den brugte det oprindelige setpunkt, for ikke at reguleringen skal gå helt i skoven.&lt;br /&gt;
&lt;br /&gt;
===Visning af setpunkt===&lt;br /&gt;
&lt;br /&gt;
Denne tilstand er etableret, for at brugeren kan se hvilket setpunkt der reguleres efter. Setpunktet skal blot vises i displayet.&lt;br /&gt;
&lt;br /&gt;
Man kommer i denne tilstand når man har indtastet et nyt setpunkt, eller hvis man har trykket på *-tasten i hviletilstanden.&lt;br /&gt;
&lt;br /&gt;
Man kan kun komme tilbage til hvile-tilstanden herfra, og det kan ske ved at man taster *-tasten eller ved at man venter på timeout. I denne tilstand vil timeout være besdt omkring 1 - 2 sekunder.&lt;br /&gt;
&lt;br /&gt;
===Problemer med denne state-machine===&lt;br /&gt;
Ud fra den måde som state-machinen er defineret, så kan der komme et problem.&lt;br /&gt;
&lt;br /&gt;
Hvis tasterne er en type der blot registreres når de holdes nede, så vil man få et problem både med #-tasten og med *-tasten.&lt;br /&gt;
&lt;br /&gt;
Problemet med * tasten vil være at når man i hviletilstanden taster den, så vil den gå i Vis setpunkt, men hvis man stadig registrerer tasten her, så vil den gå tilbage i hvile-tilstanden.&lt;br /&gt;
&lt;br /&gt;
I praksisi vil det betyde at når brugeren trykker på tasten, så vil den vippe lynhurtigt mellem de to tilstande, og det vil virke som en tilfældighed om den ender i Vis setpunkt eller i hvile.&lt;br /&gt;
&lt;br /&gt;
Samme problematik kan være gældende for #-tasten i Indtast setpunkt, men resultatet vil her være lidt anderledes, nemlig at den altid vil løbe direkte gennem indtastningen og over i visningen, altså vil man ikke kunne komme til at at taste cifre, med mindre man er lynhurtig.&lt;br /&gt;
&lt;br /&gt;
==Pseudokode til state-machine==&lt;br /&gt;
For at illustrere hvordan koden kunne laves, så er der her vist pseudokode for eksemplet.&lt;br /&gt;
&lt;br /&gt;
For at state-machinen skal fungere fornuftigt, så kræves det at den er placeret i et loop, hvor den kommer forbi tit (princippet er [[polling]]).&lt;br /&gt;
&lt;br /&gt;
De 3 tilstande navngives Hvile, Indtast og Vis&lt;br /&gt;
&lt;br /&gt;
Pseudokoden kan laves som følger:&lt;br /&gt;
&lt;br /&gt;
 Hvis Hvile&lt;br /&gt;
    Vis aktuel temperatur&lt;br /&gt;
    Hvis #&lt;br /&gt;
       Tilstand = Indtast&lt;br /&gt;
       NytSetpunt = 0&lt;br /&gt;
    Hvis *&lt;br /&gt;
       Tilstand = Vis&lt;br /&gt;
 Hvis Indtast&lt;br /&gt;
    Hvis ciffer&lt;br /&gt;
       NytSetpunkt = NytSetpunkt * 10 + ciffer&lt;br /&gt;
    Hvis #&lt;br /&gt;
       Setpunkt = NytSetpunkt&lt;br /&gt;
       Tilstand = Vis&lt;br /&gt;
    Hvis Timeout&lt;br /&gt;
       Tilstand = Hvile&lt;br /&gt;
 Hvis Vis&lt;br /&gt;
    Vis Setpunkt&lt;br /&gt;
    Hvis *&lt;br /&gt;
       Tilstand = Hvile&lt;br /&gt;
    Hvis Timeout&lt;br /&gt;
       Tilstand = Hvile&lt;br /&gt;
 Reguler temperatur&lt;br /&gt;
&lt;br /&gt;
==Implementering i Arduino==&lt;br /&gt;
&lt;br /&gt;
Her er der et forslag til hvordan den beskrevne state-machine er blevet implementeret pakket i en [[Media:state-arduino.zip|ZIP-fil]].&lt;br /&gt;
&lt;br /&gt;
I implementeringen anvender jeg [[Keypad]]-modulet til indtastning af tal - det kunne lige så godt gøres med [[RC-tast]] eller med simple kontakter for demoformålet. Til visningen har jeg anvendt [[LiquidCrystal]]-modulet med et 2 x 16 karakters [[display]] - det kunne selvfølgelig også være et 2 x 8, hvor man så begrænsede teksten, eller helt simpelt kunne man få noget ud på nogle lysdioder.&lt;br /&gt;
&lt;br /&gt;
Der er regulering, og der er 3 forskellige display-visninger, alt efter hvilket state den befinder sig i.&lt;br /&gt;
&lt;br /&gt;
Den øverste linie i displayet skifter alt efter hvilket state den er i, og den nederste linie viser om der varmes - der er plads til flere informationer.&lt;br /&gt;
&lt;br /&gt;
I hvile-tilstanden er der bare en udlæsning af den aflæste temperatur. Man skal have en LM35 på A0 indgangen, og have 1,024V på AD-ref. Der skal forbindes til relæ med et varmelegeme på ben 13.&lt;br /&gt;
&lt;br /&gt;
visningen er som følger:&lt;br /&gt;
 Temperatur: nn.nn&lt;br /&gt;
 ON&lt;br /&gt;
&lt;br /&gt;
I Indtastnings-tilstanden er visningen:&lt;br /&gt;
 Indtast: nn&lt;br /&gt;
 OFF&lt;br /&gt;
&lt;br /&gt;
I Indtastnings-tilstanden er visningen:&lt;br /&gt;
 Setpoint: nn.nn&lt;br /&gt;
 ON&lt;br /&gt;
&lt;br /&gt;
Tasterne med # og * har den beskrevne opførsel.&lt;br /&gt;
&lt;br /&gt;
I indtastningen timeoutes efter 20 sekunder&lt;br /&gt;
&lt;br /&gt;
I visningen af setpunktet timeoutes efter 2 sekunder&lt;br /&gt;
&lt;br /&gt;
Der er ligeledes understøttet en visning i Serial monitor&lt;br /&gt;
&lt;br /&gt;
==Implementering i JAL==&lt;br /&gt;
&lt;br /&gt;
Her er der et forslag til hvordan den beskrevne state-machine er blevet implementeret pakket i en [[Media:state.zip|ZIP-fil]].&lt;br /&gt;
&lt;br /&gt;
I implementeringen anvender jeg [[AD-tast]]-modulet til indtastning af tal - det kunne lige så godt gøres med [[RC-tast]] eller med simple kontakter for demoformålet. Til visningen har jeg anvendt [[ALCD]]-modulet med et 2 x 16 karakters display - det kunne selvfølgelig også være et 2 x 8, hvor man så begrænsede teksten, eller helt simpelt kunne man få noget ud på nogle lysdioder.&lt;br /&gt;
&lt;br /&gt;
Der er ikke lavet nogen regulering, men der er 3 forskellige display-visninger, alt efter hvilket state den befinder sig i.&lt;br /&gt;
&lt;br /&gt;
Den øverste linie i displayet skifter alt efter hvilket state den er i, og den nederste linie er anvendt til debug-oplysninger, med state og timeout-counter&lt;br /&gt;
&lt;br /&gt;
I hvile-tilstanden er der bare en udlæsning af et AD-tal. Man kan forbinde et potentiometer til den aktuelle kanal, og se at tallet følger spændingen på indgangen. visningen er som følger:&lt;br /&gt;
 AD nnnn&lt;br /&gt;
 ST x T nnnn&lt;br /&gt;
&lt;br /&gt;
I Indtastnings-tilstanden er visningen:&lt;br /&gt;
 SET  nnn&lt;br /&gt;
 ST x T nnnn&lt;br /&gt;
&lt;br /&gt;
I Indtastnings-tilstanden er visningen:&lt;br /&gt;
 SETPOINT  nnn&lt;br /&gt;
 ST x T nnnn&lt;br /&gt;
&lt;br /&gt;
Tasterne med # og * har den beskrevne opførsel.&lt;br /&gt;
&lt;br /&gt;
I indtastningen timeoutes efter 20 sekunder&lt;br /&gt;
&lt;br /&gt;
I visningen af setpunktet timeoutes efter 2 sekunder&lt;br /&gt;
[[Kategori: Program-klassikere]]&lt;br /&gt;
[[Kategori: Software-beskrivelse]]&lt;/div&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
</feed>