Hi Leute,
ich möchte ganz gerne meinen Arduino Uno so programmieren, dass ein Ausgang "HIGH" geht, wenn der Wert von einem Temperatursensor von einer höheren Temperatur, also einem höheren Wert sinkt. Zum Beispiel von 1023 auf 800. Der Ausgang soll aber nur angehen, wenn ein Wert erreicht Wert, der sinkt, also sich nur abkühlt und es kälter wird! Wenn der Wert dauerhaft unter oder über diesem Wert liegt oder der Wert steigt, soll der Ausgang nicht "HIGH" gehen.
Mein Code steht unten und da, wo die Fragezeichen weiß ich nicht, was ich da hinschreiben soll, damit der Ausgang nur angeht, wenn der Wert fällt. Also der Code ist auch noch nicht fertig, ich Scheiter nur an der Stelle.
Vielen Dank schonmal im Voraus, wäre cool, wenn jemand schnell antwortet
Liebe Grüße
int Eingang=A0;
int sensorWert=0;
int Ausgang=7;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
sensorWert=analogRead(Eingang);
Serial.print("Sensorwert=");
Serial.println(sensorWert);
delay (1000);
if (sensorWert <= 1020 ) //????
{
digitalWrite (Ausgang, HIGH);
}
}
du musst dir eine Logik bauen um erstmal auszuwerten ob es kälter oder wärmer wird. Dafür wird ein Vergleichswert benötigt. Man speichert sich den alten Wert und vergleicht ihn mit dem Neuen. Ich habe mal einen Ansatz erstellt.
Wenn sich die Temp. geändert hat, wird geschaut wie sie sich geändert hat und die neue Temp. als alte für den nächsten Vergleich gespeichert. Mit den gesetzten bools und dem Temperaturvergleich wird dann entschieden was das Relais macht. Wenn du damit klar kommst musste die Logik entsprechend weiter anpassen. Ggf. muss noch eine Hysterese rein. Sonst könnte es flattern.
Moin,
ich geb mal auch noch einen.
Ohne Delay.
Nach der Messung wird verglichen, ob sich der Messwert in seinem Bereich befindet.
Danach wird verglichen, ob der Wert nach unten, bzw. gleich geblieben -> dann EIN sonst aus.
const int Eingang = A0;
const int Ausgang = 7;
const int oberGrenze = 1000;
const int unterGrenze = 800;
int sensorWert;
int altWert = 0;
unsigned int lastmillis;
const unsigned int pauseZeit = 1000; // Zeit in ms
void setup() {
Serial.begin(9600);
}
void loop() {
if (millis() - lastmillis > pauseZeit) {
lastmillis = millis();
sensorWert = analogRead(Eingang);
Serial.print("Sensorwert=");
Serial.println(sensorWert);
if (sensorWert <= oberGrenze && sensorWert > unterGrenze) {
if (sensorWert <= altWert) {
digitalWrite (Ausgang, HIGH);
}
else {
digitalWrite(Ausgang, LOW);
}
altWert = sensorWert;
}
}
}
Vielen Dank nochmals, ich hab die Codes eigentlich soweit verstanden, ich habe nur noch die Frage, wie das Programm weiß, was der alte Wert also altWert und sensor.alt in den Fällen sind.
if (sensorWert <= altWert) //Also hier bei dem letzten gepusteten code
if (sensor.aktuell < sensor.alt) //Und bei dem zweiten das
Wäre super, wenn einer von euch das nochmals erklärt könnte
Danke nochmal und auch schonmal im Voraus
amararduinoinda:
Programm weiß, was der alte Wert also altWert und sensor.alt in den Fällen sind.
In meinem Code jetzt hier mit Kommentar
if (sensorWert <= oberGrenze && sensorWert > unterGrenze) { // sensorWert im Bereich?
if (sensorWert <= altWert) { // nur wenn vorheriger höher
digitalWrite (Ausgang, HIGH); // mache was
}
else {
digitalWrite(Ausgang, LOW); // oder mache was anders
}
altWert = sensorWert; // merke den Wert für den nächsten Vergleich
amararduinoinda:
Dann gehts jetzt gleich mal ans testen
Bitte beachte, wo ich den Merker für den Wert gesetzt habe.
Egal, ob der aktuelle Wert höher ODER niedriger ist, ich merke den Wert immer.
Hintergrund meines Gedanken war es, das der Sensorwert z.B 910 sein könnte, der altWert aber 850.
Dann geht 7 erstmal LOW, aber mit der nächsten Messung ist der Sensorwert 900 - dann geht 7 wieder HIGH.
Wenn DU erst wieder einsteigen willst, wenn der Sensorwert unter die 850 kommt, dann musst Du den Merker in den Bereich stecken: