<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.opensourceecology.de/index.php?action=history&amp;feed=atom&amp;title=TempCTRL_v1_firmware</id>
	<title>TempCTRL v1 firmware - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.de/index.php?action=history&amp;feed=atom&amp;title=TempCTRL_v1_firmware"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;action=history"/>
	<updated>2026-05-14T09:20:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Open Source Ecology - Germany</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11603&amp;oldid=prev</id>
		<title>Case am 31. Januar 2016 um 09:32 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11603&amp;oldid=prev"/>
		<updated>2016-01-31T09:32:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Abfassung vorher&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 31. Januar 2016, 09:32 Uhr&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-l32&quot; &gt;Zeile 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 32:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;  */&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;  */&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;// include the library code:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// include the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;lcd-&lt;/ins&gt;library code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key oseg_04-mw_:diff::1.12:old-11602:rev-11603 --&gt;
&lt;/table&gt;</summary>
		<author><name>Case</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11602&amp;oldid=prev</id>
		<title>Case am 31. Januar 2016 um 09:30 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11602&amp;oldid=prev"/>
		<updated>2016-01-31T09:30:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Abfassung vorher&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 31. Januar 2016, 09:30 Uhr&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-l2&quot; &gt;Zeile 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;Sie benötigt noch eine externe Library namens &amp;quot;UIPEthernet&amp;quot; und erlaubt die Verwendung von ENC28J60 Ethernet-Modulen, welche äusserst preisgünstig zu haben sind, im Unterschied zum klassischen W5100-Ethernet-Shield für Arduino. Früher konnte der ENC28J60 nur mit einer externen Library namens &amp;quot;EtherCard&amp;quot; betrieben werden, aber die Funktionsaufrufe der Ethercard-Library sind nicht kompatibel zur Standard-Ethernet-Library der Arduino-IDE, weshalb sie eben separat benötigt wird. Es gibt aber mittlerweile auch die Möglichkeit, einen ENC28J60 mittels UIPEthernet mit standard-konformen Funktionsaufrufen zu betreiben, weshalb &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;dieses &lt;/del&gt;hier zum Einsatz kommt.   &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie benötigt noch eine externe Library namens &amp;quot;UIPEthernet&amp;quot; und erlaubt die Verwendung von ENC28J60 Ethernet-Modulen, welche äusserst preisgünstig zu haben sind, im Unterschied zum klassischen W5100-Ethernet-Shield für Arduino. Früher konnte der ENC28J60 nur mit einer externen Library namens &amp;quot;EtherCard&amp;quot; betrieben werden, aber die Funktionsaufrufe der Ethercard-Library sind nicht kompatibel zur Standard-Ethernet-Library der Arduino-IDE, weshalb sie eben separat benötigt wird. Es gibt aber mittlerweile auch die Möglichkeit, einen ENC28J60 mittels UIPEthernet mit standard-konformen Funktionsaufrufen zu betreiben, weshalb &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;diese &lt;/ins&gt;hier zum Einsatz kommt.   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;Download der Library unter https://github.com/ntruchsess/arduino_uip&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;Download der Library unter https://github.com/ntruchsess/arduino_uip&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key oseg_04-mw_:diff::1.12:old-11586:rev-11602 --&gt;
&lt;/table&gt;</summary>
		<author><name>Case</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11586&amp;oldid=prev</id>
		<title>Case am 31. Januar 2016 um 08:38 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11586&amp;oldid=prev"/>
		<updated>2016-01-31T08:38:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Abfassung vorher&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 31. Januar 2016, 08:38 Uhr&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-l2&quot; &gt;Zeile 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;Sie benötigt noch eine externe Library namens &amp;quot;UIPEthernet&amp;quot; und erlaubt die Verwendung von ENC28J60 Ethernet-Modulen, welche äusserst preisgünstig zu haben sind, im Unterschied zum klassischen W5100-Ethernet-Shield für Arduino. Früher konnte der ENC28J60 nur mit einer externen Library namens &amp;quot;EtherCard&amp;quot; betrieben werden, aber die Funktionsaufrufe der Ethercard-Library sind nicht kompatibel zur Standard-Ethernet-Library der Arduino-IDE, weshalb sie eben separat benötigt wird. Es gibt aber mittlerweile auch die Möglichkeit, einen ENC28J60 mittels UIPEthernet mit standard-konformen Funktionsaufrufen zu betreiben, weshalb dieses hier zum Einsatz kommt.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sie benötigt noch eine externe Library namens &amp;quot;UIPEthernet&amp;quot; und erlaubt die Verwendung von ENC28J60 Ethernet-Modulen, welche äusserst preisgünstig zu haben sind, im Unterschied zum klassischen W5100-Ethernet-Shield für Arduino. Früher konnte der ENC28J60 nur mit einer externen Library namens &amp;quot;EtherCard&amp;quot; betrieben werden, aber die Funktionsaufrufe der Ethercard-Library sind nicht kompatibel zur Standard-Ethernet-Library der Arduino-IDE, weshalb sie eben separat benötigt wird. Es gibt aber mittlerweile auch die Möglichkeit, einen ENC28J60 mittels UIPEthernet mit standard-konformen Funktionsaufrufen zu betreiben, weshalb dieses hier zum Einsatz kommt. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Download der Library unter https://github.com/ntruchsess/arduino_uip&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key oseg_04-mw_:diff::1.12:old-11585:rev-11586 --&gt;
&lt;/table&gt;</summary>
		<author><name>Case</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11585&amp;oldid=prev</id>
		<title>Case: Die Seite wurde neu angelegt: „ Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &quot;heizkreisrelais7&quot;. (Stand 30.01.2016)  Sie benötigt noch eine externe Library namens &quot;UIPEthern…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v1_firmware&amp;diff=11585&amp;oldid=prev"/>
		<updated>2016-01-31T08:36:30Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „ Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)  Sie benötigt noch eine externe Library namens &amp;quot;UIPEthern…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Hier die aktuelle Firmware-Version für TempCTRL V.1, namens &amp;quot;heizkreisrelais7&amp;quot;. (Stand 30.01.2016)&lt;br /&gt;
&lt;br /&gt;
Sie benötigt noch eine externe Library namens &amp;quot;UIPEthernet&amp;quot; und erlaubt die Verwendung von ENC28J60 Ethernet-Modulen, welche äusserst preisgünstig zu haben sind, im Unterschied zum klassischen W5100-Ethernet-Shield für Arduino. Früher konnte der ENC28J60 nur mit einer externen Library namens &amp;quot;EtherCard&amp;quot; betrieben werden, aber die Funktionsaufrufe der Ethercard-Library sind nicht kompatibel zur Standard-Ethernet-Library der Arduino-IDE, weshalb sie eben separat benötigt wird. Es gibt aber mittlerweile auch die Möglichkeit, einen ENC28J60 mittels UIPEthernet mit standard-konformen Funktionsaufrufen zu betreiben, weshalb dieses hier zum Einsatz kommt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// W5100-based Ethernet-Shield&lt;br /&gt;
//#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
//#include &amp;lt;Ethernet.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ENC28J60 Ethernet-Shield - you need the UIPEthernet library for that !!!&lt;br /&gt;
#include &amp;lt;UIPEthernet.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  LiquidCrystal Library - Pinout:&lt;br /&gt;
&lt;br /&gt;
 * LCD RS pin to digital pin 12&lt;br /&gt;
 * LCD Enable pin to digital pin 11&lt;br /&gt;
 * LCD D4 pin to digital pin 5&lt;br /&gt;
 * LCD D5 pin to digital pin 4&lt;br /&gt;
 * LCD D6 pin to digital pin 3&lt;br /&gt;
 * LCD D7 pin to digital pin 2&lt;br /&gt;
 * LCD R/W pin to ground&lt;br /&gt;
 * 10K resistor:&lt;br /&gt;
 * ends to +5V and ground&lt;br /&gt;
 * wiper to LCD VO pin (pin 3)&lt;br /&gt;
 &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// include the library code:&lt;br /&gt;
#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Boards.h&amp;gt;&lt;br /&gt;
#include &amp;lt;EtherCard.h&amp;gt;&lt;br /&gt;
#include &amp;lt;OneWire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;DallasTemperature.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// initialize the library with the numbers of the interface pins&lt;br /&gt;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);&lt;br /&gt;
&lt;br /&gt;
// LCD-Keypad&lt;br /&gt;
// LiquidCrystal lcd(8, 9, 7, 6, 5, 4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const int key1 = 6;    // the number of the pushbutton pin&lt;br /&gt;
const int key2 = 7;    // the number of the pushbutton pin&lt;br /&gt;
const int key3 = 8;    // the number of the pushbutton pin&lt;br /&gt;
const int key4 = 9;    // the number of the pushbutton pin&lt;br /&gt;
const int key5 = 10;    // the number of the pushbutton pin&lt;br /&gt;
&lt;br /&gt;
int key1State = 0;         // variable for reading the pushbutton status&lt;br /&gt;
int key2State = 0;         // variable for reading the pushbutton status&lt;br /&gt;
int key3State = 0;         // variable for reading the pushbutton status&lt;br /&gt;
int key4State = 0;         // variable for reading the pushbutton status&lt;br /&gt;
int key5State = 0;         // variable for reading the pushbutton status&lt;br /&gt;
&lt;br /&gt;
// int grad = 75;  // default soll-Wert für Heizung&lt;br /&gt;
int grad = 27;  // zum testen mit Körpertemperatur&lt;br /&gt;
int hysterese = 3; // erlaubte Schwankungsbreite bzw. Abweichung nach oben oder unten&lt;br /&gt;
&lt;br /&gt;
// int MAXGRAD = 124; // Maximale Temp vom DS18B20 Temperatursensor&lt;br /&gt;
// int MINGRAD = -55; // Minimale Temp vom DS18B20 Temperatursensor&lt;br /&gt;
int MAXGRAD = 100; // Temperatur soll unter 100 Grad bleiben&lt;br /&gt;
int MINGRAD = 0; // Temperatur soll über 0 Grad bleiben&lt;br /&gt;
&lt;br /&gt;
int MAXHYS = 50; // Schwankungsbreite = 1/2 MAXGRAD&lt;br /&gt;
int MINHYS = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const int relPin =  13;      // the number of the relay pin&lt;br /&gt;
int rs =  0;      // the current Relais-mode as integer: &lt;br /&gt;
String relState = &amp;quot; aus&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Data wire is plugged into analog port A0 on the Arduino&lt;br /&gt;
// #define ONE_WIRE_BUS A0&lt;br /&gt;
#define BUS0 A0&lt;br /&gt;
#define BUS1 A1&lt;br /&gt;
&lt;br /&gt;
#define TEMPERATURE_PRECISION 9&lt;br /&gt;
&lt;br /&gt;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)&lt;br /&gt;
// OneWire oneWire(ONE_WIRE_BUS);&lt;br /&gt;
OneWire ow_bus0(BUS0);&lt;br /&gt;
OneWire ow_bus1(BUS1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Pass our oneWire reference to Dallas Temperature. &lt;br /&gt;
// DallasTemperature sensors(&amp;amp;oneWire);&lt;br /&gt;
DallasTemperature sensors0(&amp;amp;ow_bus0);&lt;br /&gt;
DallasTemperature sensors1(&amp;amp;ow_bus1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// arrays to hold device addresses&lt;br /&gt;
// uint8_t insideThermometer[8], outsideThermometer[8];&lt;br /&gt;
uint8_t sensoradresses0[8][8];&lt;br /&gt;
uint8_t sensoradresses1[8][8];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ethernet interface mac address, must be unique on the LAN&lt;br /&gt;
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x36 };&lt;br /&gt;
static byte myip[] = { 192,168,178,207 };&lt;br /&gt;
static byte mygw[] = { 192,168,178,1 };&lt;br /&gt;
&lt;br /&gt;
byte Ethernet::buffer[500];&lt;br /&gt;
BufferFiller bfill;&lt;br /&gt;
&lt;br /&gt;
// const char website[] PROGMEM = &amp;quot;wikipedia.de&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
float U = 0;&lt;br /&gt;
float mytemp = 0;&lt;br /&gt;
float temps0[8];&lt;br /&gt;
float temps1[8];&lt;br /&gt;
&lt;br /&gt;
int STATIC_IP = 1;  // 0 = DHCP   1 = Static IP&lt;br /&gt;
&lt;br /&gt;
int i = 0;&lt;br /&gt;
int count0 = 0;&lt;br /&gt;
int count1 = 0;&lt;br /&gt;
&lt;br /&gt;
void setup () {&lt;br /&gt;
&lt;br /&gt;
  // start serial port&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;Heizkreisrelais online&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // initialize the LED pin as an output:&lt;br /&gt;
  pinMode(relPin, OUTPUT);      &lt;br /&gt;
  // initialize the pushbutton pin as an input:&lt;br /&gt;
  pinMode(key1, INPUT);     &lt;br /&gt;
  pinMode(key2, INPUT);     &lt;br /&gt;
  pinMode(key3, INPUT);     &lt;br /&gt;
  pinMode(key4, INPUT);     &lt;br /&gt;
  pinMode(key5, INPUT);     &lt;br /&gt;
 &lt;br /&gt;
  // set up the LCD's number of columns and rows: &lt;br /&gt;
  lcd.begin(16, 2);&lt;br /&gt;
  // Print a message to the LCD.&lt;br /&gt;
  lcd.setCursor(0, 0);&lt;br /&gt;
  lcd.print(&amp;quot;Heizkreisrelais&amp;quot;);&lt;br /&gt;
  lcd.setCursor(0, 1);&lt;br /&gt;
  lcd.print(&amp;quot;V.04 by Case&amp;quot;);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  //delay(100);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if (ether.begin(sizeof Ethernet::buffer, mymac,53) == 0)&lt;br /&gt;
  {&lt;br /&gt;
    //lcd.setCursor(0, 0);&lt;br /&gt;
    //lcd.print(&amp;quot;Failed to access Ethernet controller&amp;quot;);&lt;br /&gt;
    Serial.println( &amp;quot;Failed to access Ethernet controller&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    //lcd.setCursor(0, 0);&lt;br /&gt;
    //lcd.print(&amp;quot;Connected to Ethernet controller&amp;quot;);&lt;br /&gt;
    Serial.println( &amp;quot;Connected to Ethernet controller&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
  if (STATIC_IP != 0) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;\nGet Static IP ...&amp;quot;);&lt;br /&gt;
    ether.staticSetup(myip,mygw);&lt;br /&gt;
    ether.printIp(&amp;quot;My IP: &amp;quot;, ether.myip);&lt;br /&gt;
    ether.printIp(&amp;quot;My GW: &amp;quot;, ether.gwip);&lt;br /&gt;
  }  &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;\nGet DHCP ...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    if (!ether.dhcpSetup())&lt;br /&gt;
      Serial.println(&amp;quot;DHCP failed&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
    ether.printIp(&amp;quot;My IP: &amp;quot;, ether.myip);&lt;br /&gt;
    // ether.printIp(&amp;quot;Netmask: &amp;quot;, ether.mymask);&lt;br /&gt;
    ether.printIp(&amp;quot;GW IP: &amp;quot;, ether.gwip);&lt;br /&gt;
    ether.printIp(&amp;quot;DNS IP: &amp;quot;, ether.dnsip);&lt;br /&gt;
&lt;br /&gt;
    // if (!ether.dnsLookup(website))&lt;br /&gt;
    //   Serial.println(&amp;quot;DNS failed&amp;quot;);&lt;br /&gt;
    // ether.printIp(&amp;quot;Server: &amp;quot;, ether.hisip);&lt;br /&gt;
    &lt;br /&gt;
  } // end else static&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  //check Bus 0&lt;br /&gt;
  sensors0.begin();&lt;br /&gt;
  count0 = sensors0.getDeviceCount();&lt;br /&gt;
  Serial.print(&amp;quot;Bus0 Adresses found: &amp;quot;);&lt;br /&gt;
  Serial.println(count0);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;count0; i++)&lt;br /&gt;
  {&lt;br /&gt;
    // if (!sensors.getAddress(outsideThermometer, 1)) Serial.println(&amp;quot;Unable to find address for Device 1&amp;quot;); &lt;br /&gt;
    if (!sensors0.getAddress(sensoradresses0[i], i)) Serial.println(&amp;quot;Unable to find address for Device &amp;quot; + i); &lt;br /&gt;
  &lt;br /&gt;
    // show the addresses we found on the bus&lt;br /&gt;
    // Serial.print(&amp;quot;Device 0 Address: &amp;quot;);&lt;br /&gt;
    printAddress(sensoradresses0[i]);&lt;br /&gt;
    Serial.println();&lt;br /&gt;
&lt;br /&gt;
    // set the resolution to 9 bit&lt;br /&gt;
    sensors0.setResolution(sensoradresses0[i], 9);&lt;br /&gt;
 &lt;br /&gt;
    // sensors.requestTemperatures(); // Send the command to get temperatures&lt;br /&gt;
  &lt;br /&gt;
  } // end for&lt;br /&gt;
  sensors0.setWaitForConversion(false);&lt;br /&gt;
  &lt;br /&gt;
/*  &lt;br /&gt;
  //check Bus 1&lt;br /&gt;
  sensors1.begin();&lt;br /&gt;
  count1 = sensors1.getDeviceCount();&lt;br /&gt;
  Serial.print(&amp;quot;Bus1 Adresses found: &amp;quot;);&lt;br /&gt;
  Serial.println(count1);&lt;br /&gt;
  &lt;br /&gt;
  //check Bus 1&lt;br /&gt;
  for(i=0; i&amp;lt;count1; i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (!sensors1.getAddress(sensoradresses1[i], i)) Serial.println(&amp;quot;Unable to find address for Device &amp;quot; + i); &lt;br /&gt;
  &lt;br /&gt;
    // show the addresses we found on the bus&lt;br /&gt;
    // Serial.print(&amp;quot;Device 0 Address: &amp;quot;);&lt;br /&gt;
    printAddress(sensoradresses1[i]);&lt;br /&gt;
    Serial.println();&lt;br /&gt;
&lt;br /&gt;
    // set the resolution to 9 bit&lt;br /&gt;
    sensors1.setResolution(sensoradresses1[i], 9);&lt;br /&gt;
 &lt;br /&gt;
    // sensors.requestTemperatures(); // Send the command to get temperatures&lt;br /&gt;
  &lt;br /&gt;
  } // end for&lt;br /&gt;
  sensors1.setWaitForConversion(false);&lt;br /&gt;
  &lt;br /&gt;
*/&lt;br /&gt;
  &lt;br /&gt;
  // Startzustand: Relais ist ausgeschaltet&lt;br /&gt;
  relState = &amp;quot;0&amp;quot;; &lt;br /&gt;
  rs=0;&lt;br /&gt;
  &lt;br /&gt;
} // end setup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// function to print a device address&lt;br /&gt;
void printAddress(uint8_t deviceAddress[])&lt;br /&gt;
{&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 8; i++)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(deviceAddress[i], HEX);&lt;br /&gt;
    if (i &amp;lt; 7) Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// function to print the temperature for a device&lt;br /&gt;
void printTemperature(uint8_t deviceAddress[], int whichbus)&lt;br /&gt;
{&lt;br /&gt;
  float tempC = 0.0;&lt;br /&gt;
  &lt;br /&gt;
  if(whichbus == 0)  tempC = sensors0.getTempC(deviceAddress);&lt;br /&gt;
  if(whichbus == 1)  tempC = sensors1.getTempC(deviceAddress);&lt;br /&gt;
    &lt;br /&gt;
  Serial.print(&amp;quot;Temp C: &amp;quot;);&lt;br /&gt;
  Serial.print(tempC);&lt;br /&gt;
  // U = tempC;&lt;br /&gt;
  // Serial.print(U);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// function to print a device's resolution&lt;br /&gt;
void printResolution(uint8_t deviceAddress[])&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(&amp;quot;Resolution: &amp;quot;);&lt;br /&gt;
  Serial.print(sensors0.getResolution(deviceAddress));&lt;br /&gt;
  Serial.println();    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// main function to print information about a device&lt;br /&gt;
void printData(uint8_t deviceAddress[])&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(&amp;quot;Device Address: &amp;quot;);&lt;br /&gt;
  printAddress(deviceAddress);&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  printTemperature(deviceAddress,0);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static word homePage() {&lt;br /&gt;
  long t = millis() / 1000;&lt;br /&gt;
  word h = t / 3600;&lt;br /&gt;
  byte m = (t / 60) % 60;&lt;br /&gt;
  byte s = t % 60;&lt;br /&gt;
  word t0[8];&lt;br /&gt;
  word t1[8];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;8; i++) t0[i] = 22222.0;&lt;br /&gt;
  for(i=0; i&amp;lt;8; i++) t1[i] = 22222.0;&lt;br /&gt;
  &lt;br /&gt;
  for(i=0; i&amp;lt;count0; i++) t0[i] = temps0[i] * 100;&lt;br /&gt;
  for(i=0; i&amp;lt;count1; i++) t1[i] = temps1[i] * 100;&lt;br /&gt;
  &lt;br /&gt;
  t0[1]= grad;&lt;br /&gt;
  t0[2]= hysterese;&lt;br /&gt;
  t0[3]= rs;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // Serial.println(U);&lt;br /&gt;
  &lt;br /&gt;
  bfill = ether.tcpOffset();&lt;br /&gt;
  bfill.emit_p(PSTR(&lt;br /&gt;
    &amp;quot;HTTP/1.0 200 OK\r\n&amp;quot;&lt;br /&gt;
    &amp;quot;Content-Type: text/html\r\n&amp;quot;&lt;br /&gt;
    &amp;quot;Pragma: no-cache\r\n&amp;quot;&lt;br /&gt;
    &amp;quot;\r\n&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;meta http-equiv='refresh' content='10'/&amp;gt;&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;lt;title&amp;gt;Heizkreisrelais, 2015 by OpenEcoLab Rahden&amp;lt;/title&amp;gt;&amp;quot; &lt;br /&gt;
    // &amp;quot;&amp;lt;h1&amp;gt;:$D.$D:$D.$D:&amp;lt;/h1&amp;gt;&amp;quot;),&lt;br /&gt;
    // &amp;quot;&amp;lt;b&amp;gt;:$D.$D:$D.$D:&amp;lt;/b&amp;gt;&amp;quot;),&lt;br /&gt;
    // &amp;quot;&amp;lt;b&amp;gt;:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:&amp;lt;/b&amp;gt;&amp;quot;),&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;&amp;lt;b&amp;gt;:$D.$D:$D:$D:$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:$D.$D:&amp;lt;/b&amp;gt;&amp;quot;),&lt;br /&gt;
&lt;br /&gt;
    // t0[0]/100, t0[0]%100, t0[1]/100, t0[1]%100);&lt;br /&gt;
    // t0[0]/100, t0[0]%100, t0[1]/100, t0[1]%100, t0[2]/100, t0[2]%100, t0[3]/100, t0[3]%100);&lt;br /&gt;
    &lt;br /&gt;
    // t0[0]/100, t0[0]%100, t0[1]/100, t0[1]%100, t0[2]/100, t0[2]%100, t0[3]/100, t0[3]%100,&lt;br /&gt;
&lt;br /&gt;
    t0[0]/100, t0[0]%100, t0[1], t0[2], t0[3],&lt;br /&gt;
    t0[4]/100, t0[4]%100, t0[5]/100, t0[5]%100, t0[6]/100, t0[6]%100, t0[7]/100, t0[7]%100,&lt;br /&gt;
    &lt;br /&gt;
    t1[0]/100, t1[0]%100, t1[1]/100, t1[1]%100, t1[2]/100, t1[2]%100, t1[3]/100, t1[3]%100,&lt;br /&gt;
    t1[4]/100, t1[4]%100, t1[5]/100, t1[5]%100, t1[6]/100, t1[6]%100, t1[7]/100, t1[7]%100);&lt;br /&gt;
    &lt;br /&gt;
  return bfill.position();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop () {&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // Serial.println(count0);&lt;br /&gt;
     printAddress(sensoradresses0[0]);&lt;br /&gt;
 &lt;br /&gt;
  sensors0.requestTemperatures(); // Send the command to get temperatures&lt;br /&gt;
  for(i=0; i&amp;lt;count0; i++)&lt;br /&gt;
  {&lt;br /&gt;
    temps0[i] = sensors0.getTempCByIndex(i);&lt;br /&gt;
     Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
     Serial.println(temps0[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  sensors1.requestTemperatures(); // Send the command to get temperatures&lt;br /&gt;
  for(i=0; i&amp;lt;count1; i++)&lt;br /&gt;
  {&lt;br /&gt;
    temps1[i] = sensors1.getTempCByIndex(i);&lt;br /&gt;
    // Serial.println(temps1[i]);&lt;br /&gt;
  }&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // read the state of the pushbutton value:&lt;br /&gt;
  key1State = digitalRead(key1);&lt;br /&gt;
  key2State = digitalRead(key2);&lt;br /&gt;
  key3State = digitalRead(key3);&lt;br /&gt;
  key4State = digitalRead(key4);&lt;br /&gt;
  key5State = digitalRead(key5);&lt;br /&gt;
&lt;br /&gt;
  delay(100);&lt;br /&gt;
&lt;br /&gt;
  // check if the pushbutton is pressed.&lt;br /&gt;
  // if it is, the buttonState is HIGH:&lt;br /&gt;
  &lt;br /&gt;
  // Sollwert erhöhen&lt;br /&gt;
  if (key1State == HIGH) &lt;br /&gt;
  { &lt;br /&gt;
    if ( grad &amp;lt; MAXGRAD ) grad = grad + 1; &lt;br /&gt;
    else grad = 0;&lt;br /&gt;
  } &lt;br /&gt;
    // Sollwert verringern&lt;br /&gt;
  if (key2State == HIGH) &lt;br /&gt;
  { &lt;br /&gt;
    if ( grad &amp;gt; MINGRAD ) grad = grad - 1; &lt;br /&gt;
    else grad = MAXGRAD;&lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  // Schwankungsbreite erhöhen&lt;br /&gt;
  if (key3State == HIGH) &lt;br /&gt;
  { &lt;br /&gt;
    if ( hysterese &amp;lt; MAXHYS ) hysterese = hysterese + 1; &lt;br /&gt;
    else hysterese = 0;&lt;br /&gt;
  } &lt;br /&gt;
   // Schwankungsbreite verringern&lt;br /&gt;
  if (key4State == HIGH) &lt;br /&gt;
  { &lt;br /&gt;
    if ( hysterese &amp;gt; MINHYS ) hysterese = hysterese - 1; &lt;br /&gt;
    else hysterese = MAXHYS;&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // Relais per Taste umswitchen&lt;br /&gt;
  if (key5State == HIGH) &lt;br /&gt;
  { &lt;br /&gt;
    if (rs == 1) { relState = &amp;quot;0&amp;quot;; rs=0; }&lt;br /&gt;
    else { relState = &amp;quot;1&amp;quot;; rs=1; }&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;Relais: &amp;quot;);&lt;br /&gt;
    Serial.println(relState);&lt;br /&gt;
  } // end if(key5State)&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  // Relais automatisch je nach Temperatur umswitchen&lt;br /&gt;
  if((temps0[0] &amp;gt;= (grad+hysterese)) &amp;amp; (rs==1))&lt;br /&gt;
  {&lt;br /&gt;
    rs=0;&lt;br /&gt;
    relState = &amp;quot;0&amp;quot;;&lt;br /&gt;
    Serial.println(&amp;quot;Relais off&amp;quot;);&lt;br /&gt;
    // delay(10);&lt;br /&gt;
    digitalWrite(relPin, LOW);&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
  if((temps0[0] &amp;lt;= (grad-hysterese)) &amp;amp; (rs==0))&lt;br /&gt;
  {&lt;br /&gt;
    rs=1;&lt;br /&gt;
    relState = &amp;quot;1&amp;quot;;&lt;br /&gt;
    Serial.println(&amp;quot;Relais on&amp;quot;);&lt;br /&gt;
    // delay(10);&lt;br /&gt;
    digitalWrite(relPin, HIGH);&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  word len = ether.packetReceive();&lt;br /&gt;
  word pos = ether.packetLoop(len);&lt;br /&gt;
     &lt;br /&gt;
  if (pos)  // check if valid tcp data is received&lt;br /&gt;
    ether.httpServerReply(homePage()); // send web page data&lt;br /&gt;
   &lt;br /&gt;
 &lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
//   lcd.print(&amp;quot;Ist :&amp;quot;);&lt;br /&gt;
//   lcd.print(grad);&lt;br /&gt;
  lcd.print(&amp;quot;Ist:      &amp;quot;);&lt;br /&gt;
  lcd.setCursor(4,0);&lt;br /&gt;
  lcd.print(temps0[0]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  lcd.setCursor(11, 0);&lt;br /&gt;
  lcd.print(&amp;quot;Rel:&amp;quot;);  // Relais Zustände: dauer-ein, dauer-aus, dem Temperatur-Programm folgend&lt;br /&gt;
  lcd.setCursor(15, 0);&lt;br /&gt;
  // Relais Zustände: dauer-ein, dauer-aus, dem Temperatur-Programm folgend&lt;br /&gt;
  lcd.print(relState);   &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  // set the cursor to column 0, line 1&lt;br /&gt;
  // (note: line 1 is the second row, since counting begins with 0):&lt;br /&gt;
  lcd.setCursor(0, 1);&lt;br /&gt;
  lcd.print(&amp;quot;Soll:    &amp;quot;);&lt;br /&gt;
  lcd.setCursor(5, 1);&lt;br /&gt;
  lcd.print(grad);&lt;br /&gt;
  lcd.setCursor(10, 1);&lt;br /&gt;
  lcd.print(&amp;quot;+/-:  &amp;quot;);&lt;br /&gt;
  lcd.setCursor(14, 1);&lt;br /&gt;
  lcd.print(hysterese); // 1/2 Range&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
} // end loop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Case</name></author>
	</entry>
</feed>