Guten Abend liebe Community,
ich schreibe hier, weil ich bei einem Projekt nicht weiterkomme und irgendwie meinen Fehler versehe, aber nicht weiss, wie ich ihn umgehen kann.
Ich habe einen Arduino Mega 2560 mit einem Taster, einer Heizpatrone (80W bei 24V), welche über einen Relais angesteuert wird und den NTC-Thermistor 104N-4-R025H42G.
Wenn der Arduino mit Strom versorgt wird, dann soll das Programm aufgerufen werden, aber noch nichts passieren.
Wenn der Taster gedrückt wird, dann soll das Relais durchgeschaltet werden. sodass die Heizpatrone mit Spannung versorgt wird und diese in Wärme umwandelt.
Wenn die Zieltemperatur erreicht ist, so soll das Relais wieder öffnen und bei Unterschreiten der Zieltemperatur wieder schließen (Ziel ist das Halten der Soll-Temperatur).
Ich habe es versucht mit einer verkettenen If-Bedingung zu lösen.
Nur leider führt das dazu, dass immer die erste Bedingung erneut erfüllt werden muss (der Tastendruck), um daduch ein erneutes Abrufen der Unterfunktion zu starten. Leider komme ich nicht mehr weiter und weiss, nicht, wie ich das umgehen kann, dass ich nach dem Tastendruck eine kontinuierliche Temperaturregelung erreiche. Könnt ihr mir da helfen?
Ich füge euch mal den Code unten mit an, wie ich es bisher programmiert habe.
//Notwendige Bibliotheken
#include <thermistor.h>
#include <NTC_Thermistor.h>
//Analog_Input
const int temperaturfuehler = A0;
//Temperaturfühler
#define Referenzwiderstand 100000
#define Nominalwiderstand 100000
#define Referenztemperatur 25
#define BWert 4267
#define min 15 //Temperaturminimun
#define max 210 //Temperaturmaximum
Thermistor*thermistor;
//Notwendige Inputs und Outputs
const int relais = 4;
const int taster = 8;
void setup(){
thermistor = new NTC_Thermistor(A0, 100000, 100000, 25, 4267); //Thermistor 104NT-4-R025H42G
pinMode(taster, INPUT_PULLUP);
pinMode(relais, OUTPUT);
pinMode(temperaturfuehler, INPUT_PULLUP);
digitalWrite(relais, LOW);
}
void loop(){
double celsius = thermistor->readCelsius(); //Temperatur auslesen
if(digitalRead(taster)==LOW){
taster();
}
if(celsius >= max){
maxtemp();
}
void taster(){
double celsius = thermistor->readCelsius(); //Temperatur auslesen
if(celsius < max ){
digitalWrite(mosfet_heizung, HIGH);
}
else
{maxtemp();
}
}
void maxtemp(){
double celsius = thermistor->readCelsius(); //Temperatur auslesen
digitalWrite(relais, LOW);
delay(5000);
digitalWrite(relais, HIGH);
delay(5000);
}
Ich verstehe, warum er natürlich die Unterfunktionen taster() oder maxtemp() erst wieder bei erneutem Tastendruck aufruft, aber ich weiss, wie ich die TEmperaturregelung innerhalb einer Unterfunktion "loopen" lassen kann. Eine If-Bedingung mit "digtialread(taster)==HIGH;" und der Bedingung für die Temperatur würde ja dem Grundzustand entsprechen (wenn noch nie ein Taster bedient wurde). Also würde er dann (meinem Verständnis nach) schon aufheizen, obwohl noch kein Knopf gedrückt ist oder wurde. Das darf auf keinen Fall passieren.
Über eure Hilfe bin ich sehr dankbar.
Liebe Grüße und einen schönen Abend,
Maschbau
