That is the error, when I push the widget button as a switch (V4):
Guru Meditation Error: Core 1 panic’ed (IntegerDivideByZero). Exception was unhandled.
Core 1 register dump:
PC : 0x400d57ea PS : 0x00060530 A0 : 0x800d4c76 A1 : 0x3ffb1f70
A2 : 0x3ffc1a5c A3 : 0x00000000 A4 : 0x00017d52 A5 : 0x3ffb1e90
A6 : 0x00000000 A7 : 0x3ffb0060 A8 : 0x3ffc1a80 A9 : 0x00000000
A10 : 0x00017d52 A11 : 0x00000010 A12 : 0x00000001 A13 : 0x00000000
A14 : 0x00000002 A15 : 0x00000001 SAR : 0x0000000a EXCCAUSE: 0x00000006
EXCVADDR: 0x00000000 LBEG : 0x400d57da LEND : 0x400d5817 LCOUNT : 0x0000000e
ELF file SHA256: 0000000000000000
Backtrace: 0x400d57ea:0x3ffb1f70 0x400d4c73:0x3ffb1f90 0x400e051c:0x3ffb1fb0 0x4008a2f2:0x3ffb1fd0
Rebooting…
Do you have an idea what the problem is?
#define BLYNK_TEMPLATE_ID "TMPLvmzlelxk"
#define BLYNK_DEVICE_NAME "Autoklav3"
#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; // ktcCS deklariert und auf PIN 5 initialisiert
int ktcCLK = 18; // ktcCLK deklariert und auf PIN 18 initialisiert
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;
int timerZeit;
bool timer_flag; // Flag Variable als boolschen Wert um Schleife zu kontrollieren
BlynkTimer timer;
BlynkTimer timer2;
WidgetLED led1(V3);
WidgetLED ledTimer(V6);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO); // Initialisierung 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(V5) {
timerZeit = param.asInt() * 60000; // Timer, einstellbar über Slider in Blynk 60.000 Millisekunden = 1 Minute
}
BLYNK_WRITE(V4)
{
int pinValue = param.asInt();
if (pinValue == 1) {
Serial.print("\nTaste in Blynk wurde gedrückt");
//ledTimer.on();
timer_flag = true;
timer.setTimeout(timerZeit, []()
{
Serial.print("\nTimer läuft");
digitalWrite(LED, LOW);
led1.off();
//ledTimer.off();
Serial.print("\nTimer ist abgelaufen - ausschalten");
timer_flag = true;
});
}
else{
digitalWrite(LED, HIGH);
led1.on();
//ledTimer.off();
}
}
void setup()
{
Serial.begin(9600); // Serielle Schnittstelle, serieller Monitor, Baudrate 9600
Serial.println("\nMax6675 test");
pinMode(LED, OUTPUT); // deklariert LED als Output
timer.setInterval(1000L, sensorDataSend); // Timer jede Sekunde werden die Daten gelesen
timer2.setInterval(1000L, sensorDataWrite);
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 3 "); // 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() { // Timer: jede Sekunde wird der Sensor ausglesen und ausgegeben
// hält den void-loop sauber damit die Blynk Cloud nicht mit Daten überlastet wird
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);
//Blynk.virtualWrite(V5, timerZeit);
if (timer_flag == false) { // flag als variable
Serial.print("\nflag ist aus");
if (ktc.readCelsius() > solltemp)
{
digitalWrite(LED, LOW);
led1.off();
Serial.print("\nTemperatur ist höher als Soll - ausschalten");
}
else if (ktc.readCelsius() <= solltemp - hyst) // wenn gemessene Temperatur <= Solltemperatur - Hystherese über Slider in Blynk
{
digitalWrite(LED, HIGH); // dann LED bzw. Relais an
led1.on();
Serial.print("\nTemperatur ist niedriger als Soll - anschalten");
}
}
}
void sensorDataWrite() { // Timer: Gibt ausgelesene Werte auf das Display zurück
Serial.print("\nTemperatur = "); // 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
if (ktc.readCelsius() < 100) u8x8.drawString(12, 3, " "); // schreibt eine Leerzeile an angegebene Stelle, wenn der Wert unter 100 ist und die erste Ziffer zu löschen
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(); // Handshake mit dem Blynk Server
timer.run(); // startet den Timer (sensorDataSend)
timer2.run(); // startet den Timer (sensorDataWrite)
}