<?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_v2_firmware</id>
	<title>TempCTRL v2 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_v2_firmware"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;action=history"/>
	<updated>2026-05-14T23:34:35Z</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_v2_firmware&amp;diff=11598&amp;oldid=prev</id>
		<title>Case am 31. Januar 2016 um 09:16 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;diff=11598&amp;oldid=prev"/>
		<updated>2016-01-31T09:16:59Z</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:16 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.2, namens &amp;quot;heizkreisrelais_esp_lua5&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.2, namens &amp;quot;heizkreisrelais_esp_lua5&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;Ganz interessant ist bei dem Arduino-LCD-keypad (ein Standard-Bauteil, das von verschiedenen &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;herstellern &lt;/del&gt;angeboten wird), dass 5 der Microtaster pin-sparend lediglich an einem ADC-Pin hängen. Die Unterscheidung der einzelnen Tasten kann dadurch rein softwaremässig anhand unterschiedlicher vom ADC gemessener Widerstandswerte erfolgen.&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;Ganz interessant ist bei dem Arduino-LCD-keypad (ein Standard-Bauteil, das von verschiedenen &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Herstellern &lt;/ins&gt;angeboten wird), dass 5 der Microtaster pin-sparend lediglich an einem ADC-Pin hängen. Die Unterscheidung der einzelnen Tasten kann dadurch rein softwaremässig anhand unterschiedlicher vom ADC gemessener Widerstandswerte erfolgen.&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;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&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;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key oseg_04-mw_:diff::1.12:old-11597:rev-11598 --&gt;
&lt;/table&gt;</summary>
		<author><name>Case</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;diff=11597&amp;oldid=prev</id>
		<title>Case am 31. Januar 2016 um 09:16 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;diff=11597&amp;oldid=prev"/>
		<updated>2016-01-31T09:16:33Z</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:16 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-l1&quot; &gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&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;Hier die aktuelle Firmware-Version für TempCTRL V.2, namens &amp;quot;heizkreisrelais_esp_lua5&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.2, namens &amp;quot;heizkreisrelais_esp_lua5&amp;quot;. (Stand 30.01.2016)&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 style=&quot;font-weight: bold; text-decoration: none;&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;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ganz interessant ist bei dem Arduino-LCD-keypad (ein Standard-Bauteil, das von verschiedenen herstellern angeboten wird), dass 5 der Microtaster pin-sparend lediglich an einem ADC-Pin hängen. Die Unterscheidung der einzelnen Tasten kann dadurch rein softwaremässig anhand unterschiedlicher vom ADC gemessener Widerstandswerte erfolgen.&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;div&gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&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;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key oseg_04-mw_:diff::1.12:old-11576:rev-11597 --&gt;
&lt;/table&gt;</summary>
		<author><name>Case</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;diff=11576&amp;oldid=prev</id>
		<title>Case: Die Seite wurde neu angelegt: „ Hier die aktuelle Firmware-Version für TempCTRL V.2, namens &quot;heizkreisrelais_esp_lua5&quot;. (Stand 30.01.2016)  &lt;source lang=&quot;cpp&quot;&gt;  // include the library code:…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.de/index.php?title=TempCTRL_v2_firmware&amp;diff=11576&amp;oldid=prev"/>
		<updated>2016-01-31T06:50:17Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „ Hier die aktuelle Firmware-Version für TempCTRL V.2, namens &amp;quot;heizkreisrelais_esp_lua5&amp;quot;. (Stand 30.01.2016)  &amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  // include the library code:…“&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.2, namens &amp;quot;heizkreisrelais_esp_lua5&amp;quot;. (Stand 30.01.2016)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;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;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;
// Standard-Connection:&lt;br /&gt;
// LiquidCrystal lcd(12, 11, 5, 4, 3, 2);&lt;br /&gt;
// LCD-Keypad-Connection:&lt;br /&gt;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);   // select the pins used on the LCD panel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// define some values used by the panel and buttons&lt;br /&gt;
#define btnRIGHT  0&lt;br /&gt;
#define btnUP     1&lt;br /&gt;
#define btnDOWN   2&lt;br /&gt;
#define btnLEFT   3&lt;br /&gt;
#define btnSELECT 4&lt;br /&gt;
#define btnNONE   5&lt;br /&gt;
int lcd_key     = 0;&lt;br /&gt;
int adc_key_in  = 0;&lt;br /&gt;
&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;
// Relais ist activeLow&lt;br /&gt;
#define RELAY_ON 0&lt;br /&gt;
#define RELAY_OFF 1&lt;br /&gt;
const int relPin =  33;      // 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;0&amp;quot;;&lt;br /&gt;
String str;&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;
int i = 0;&lt;br /&gt;
int count0 = 0;&lt;br /&gt;
int count1 = 0;&lt;br /&gt;
&lt;br /&gt;
// Data wire is plugged into analog port A0 on the Arduino&lt;br /&gt;
#define BUS0 45&lt;br /&gt;
#define BUS1 33&lt;br /&gt;
&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 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 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 sensoradresses0[8][8];&lt;br /&gt;
uint8_t sensoradresses1[8][8];&lt;br /&gt;
&lt;br /&gt;
// refreshrate / data-logging interval&lt;br /&gt;
&lt;br /&gt;
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind&lt;br /&gt;
unsigned long interval = 1000;    // serial datalogging refreshrate in milliseconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{ &lt;br /&gt;
   digitalWrite(relPin, RELAY_OFF);  &lt;br /&gt;
   // initialize the Relay pin as an output:&lt;br /&gt;
  pinMode(relPin, OUTPUT);      &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  lcd.begin(16, 2);                // start the LCD library&lt;br /&gt;
  lcd.setCursor(0,0);              // set cursor position at start&lt;br /&gt;
  lcd.print(&amp;quot;ThermoRel. ESP&amp;quot;);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
 &lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;ThermoRelay ESP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
  Serial1.begin(9600);&lt;br /&gt;
  &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 (!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;
   // 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 of setup()&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
int read_LCD_buttons()                    //function for detection of pressed keypad button&lt;br /&gt;
{&lt;br /&gt;
 adc_key_in = analogRead(0);              // read the analog value from the sensor &lt;br /&gt;
 if (adc_key_in &amp;gt; 1000) return btnNONE;   // We make this the 1st option for speed reasons since it will be the most likely result&lt;br /&gt;
 if (adc_key_in &amp;lt; 50)   return btnRIGHT;  &lt;br /&gt;
 if (adc_key_in &amp;lt; 195)  return btnUP; &lt;br /&gt;
 if (adc_key_in &amp;lt; 380)  return btnDOWN; &lt;br /&gt;
 if (adc_key_in &amp;lt; 555)  return btnLEFT; &lt;br /&gt;
 if (adc_key_in &amp;lt; 790)  return btnSELECT;   &lt;br /&gt;
 return btnNONE;  // when all others fail, return this...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
void loop () &lt;br /&gt;
{&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;
  }&lt;br /&gt;
&lt;br /&gt;
  // temps0[i] = 32.5;     // Testwert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 lcd_key = read_LCD_buttons();  // read the buttons function&lt;br /&gt;
 switch (lcd_key)               // depending on which button was pushed, we perform an action&lt;br /&gt;
 { case btnRIGHT:&lt;br /&gt;
     { key1State = HIGH;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
   case btnLEFT:&lt;br /&gt;
     { key2State = HIGH;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
   case btnUP:&lt;br /&gt;
     { key3State = HIGH;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
   case btnDOWN:&lt;br /&gt;
     { key4State = HIGH;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
   case btnSELECT:&lt;br /&gt;
     { key5State = HIGH;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
     case btnNONE:&lt;br /&gt;
     { &lt;br /&gt;
       key1State = LOW;&lt;br /&gt;
       key2State = LOW;&lt;br /&gt;
       key3State = LOW;&lt;br /&gt;
       key4State = LOW;&lt;br /&gt;
       key5State = LOW;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 delay(40);  //wait 40ms&lt;br /&gt;
&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;
&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, RELAY_OFF);&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;
    digitalWrite(relPin, RELAY_ON);&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (millis() - previousMillis &amp;gt; interval) &lt;br /&gt;
{&lt;br /&gt;
    previousMillis = millis();   // aktuelle Zeit abspeichern&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
// Serial Monitor, zB. Arduino IDE&lt;br /&gt;
  Serial.println(&amp;quot;          &amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;Ist: &amp;quot;);&lt;br /&gt;
  Serial.println(temps0[0]);&lt;br /&gt;
  Serial.print(&amp;quot;Hys: &amp;quot;);&lt;br /&gt;
  Serial.println(hysterese);&lt;br /&gt;
  Serial.print(&amp;quot;Soll: &amp;quot;);&lt;br /&gt;
  Serial.println(grad);&lt;br /&gt;
  Serial.print(&amp;quot;Rel: &amp;quot;);&lt;br /&gt;
  Serial.println(relState);&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Serial1 is connected to ESP  &lt;br /&gt;
  Serial1.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
  Serial1.print(temps0[0]);&lt;br /&gt;
  Serial1.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
  Serial1.print(grad);&lt;br /&gt;
  Serial1.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
  Serial1.print(hysterese);&lt;br /&gt;
  Serial1.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
  Serial1.print(relState);&lt;br /&gt;
  Serial1.println(&amp;quot;:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
} // end if previousMillis&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.setCursor(4,0);&lt;br /&gt;
  lcd.print(temps0[0]);&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;
  delay(100);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
} // end loop()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Case</name></author>
	</entry>
</feed>