Thanks for this tip John, you are great! The problem is that LED is always set HIGH again, because the target temperature has not yet been reached.
Yes, Pete, but I didn’t want to upload all the codes again, so I shouldn’t do that.
#define BLYNK_TEMPLATE_ID "TMPLyYek5f7e"
#define BLYNK_DEVICE_NAME "Autoklav1"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#include <max6675.h>
#include <Wire.h>
#include <U8x8lib.h>
#include <U8g2lib.h>
#include "BlynkEdgent.h" //Bibliothek für die Verbindung mit der Blynk App über WLAN
U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); // Display 128x64 ausgewählt in Bibliothek
int ktcSO = 19; // ktcSO deklariert und auf PIN 19 initialisiert
int ktcCS = 5;
int ktcCLK = 18;
int LED = 13; // LED deklariert und PIN 13 initialisiert
double solltemp = 121; // solltemp deklariert und mit 26 initialisiert
double hyst = 2; // Hystherese deklariert
int temp = 0;
BlynkTimer timer;
//WidgetLED led1(V3);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO); // Sensor MAX6675 für Temperatur Sensor Typ K
BLYNK_WRITE(V1) // Schreibt virtuellen PIN 3 in Blynk
{
solltemp = param.asDouble(); // Sollwert = Parameter als Double (für Slider)
}
BLYNK_WRITE(V2)
{
hyst = param.asDouble(); // Hystherese = Parameter als Double (für Slider)
}
BLYNK_WRITE(V3) {
int relais = param.asInt();
if (relais == 1) {
digitalWrite(LED, HIGH);
timer.setTimeout(30000L, []()
{
digitalWrite(LED, LOW);
});
}
}
void setup()
{
Serial.begin(9600); // Serielle Schnittstelle, serieller Monitor, Baudrate 9600
Serial.println("Max6675 test");
pinMode(LED, OUTPUT); // deklariert LED als Output
timer.setInterval(1000L, sensorDataSend);
u8x8.begin();
//Der Bildschirm hat ein Raster aus Bildpunkten
//Pixel oder Bildpunkt: Ein Kästchen des Rasters
u8x8.setFont(u8x8_font_7x14_1x2_f);
// u8x8 Library mit der man sehr einfach Texte darstellen kann, Schriftgröße nur 8x8 Pixel, kaum Schriftarten
// => wenig Ressourcen
// bei u8x8 arbeitet man mit Zeilen und Spalten
// bei u8g2 arbeitet man mit Pixeln
u8x8.drawString(0, 1, " Autoklav 1 "); // 0. Zeichen von links in der 1. Spalte von oben wird geschrieben
u8x8.drawString(0, 3, "Temp:");
u8x8.drawString(0, 5, "Soll:");
u8x8.drawString(11, 3, " °C"); // 11. Zeichen von links in der 3. Spalte von oben wird geschrieben
u8x8.drawString(12, 5, "°C");
u8x8.drawString(12, 5, " ");
u8x8.setCursor(7, 1);
BlynkEdgent.begin(); // Kommunikation mit der Blynk 2.0 App
}
void sensorDataSend() {
temp = ktc.readCelsius();
Blynk.virtualWrite(V0, temp); //Schreibt die gemessene Werte auf die virtuellen PINs in der Blynk APP
Blynk.virtualWrite(V1, solltemp);
Blynk.virtualWrite(V2, hyst);
if (ktc.readCelsius() > solltemp) { // wenn die gemessene Temperatur < der angegebene Sollwert
digitalWrite(LED, LOW); // dann LED an bzw. PIN an
}
else if (ktc.readCelsius() <= solltemp - hyst) { // Hystherese, damit das Relais nicht ununterbrochen schaltet
digitalWrite(LED, HIGH); // sonst LED aus bzw. Pin aus
}
Serial.print("Temperatur = "); // Ausgabe im seriellen Monitor
Serial.print(ktc.readCelsius());
Serial.println(" °C");
u8x8.setCursor(8, 3); // Stellt den Cursor zum schreiben an das 9. Zeichen von links und die 3. Spalte von oben
// schreibt eine Leerzeile an angegebene Stelle, wenn der Wert unter 100 ist umd die erste Ziffer zu löschen
if (ktc.readCelsius() < 100) u8x8.drawString(12, 3, " ");
u8x8.print(ktc.readCelsius(), 1); // schreibt an der oben genannten Stelle den Messwert (eine Nachkommastelle: ,1)
u8x8.setCursor(8, 5);
if (solltemp < 100) u8x8.drawString(12, 5, " ");
u8x8.print(solltemp, 1);
}
void loop() {
BlynkEdgent.run();
timer.run();
}
…and is the sketch so clean?
ericsson