Archiv verlassen und diese Seite im Standarddesign anzeigen : stimmt dieser Sketch-Teil?
/
unsigned long zeit;
unsigned long zeit1;
unsigned long zeit2;
.
.
.
void loop() {
zeit=millis();
zeit1=zeit;
zeit2=zeit-zeit1;
while (analogValue>50 && zeit2>5000) { //5 Sekunden Wartezeit sowie höchste Schwelle nicht überschritten
zeit2=zeit-zeit1;
digitalWrite(green, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(red, LOW);
usw.
Was ich will:
eine Wartezeit mit der bestimmten LED Konstellation (Yellow = on) soll erhalten werden, außer eine Schwelle wird unterschritten (A/D Eingang < 50), dann sollte die Schleife beendet werden. Klappt aber in der Praxis nicht (keine Wartezeit)...
ich denke: nein.
durch zeit=millis();
zeit1=zeit;
zeit2=zeit-zeit1;
wird
zeit1=zeit;
und weil dadurch
zeit-zeit1 dasselbe ist wie zeit-zeit,
und weil zeit-zeit immer = Null ist,
ist automatisch immer
zeit2=0.
Tipp:
benenne mal zeit1 um in "zeitAlt"
und zeit2 benenne um in "delta_t"
dann wirds vielleich auch semantisch klarer.
ich denke: nein.
durch zeit=millis();
zeit1=zeit;
zeit2=zeit-zeit1;
wird
zeit1=zeit;
und weil dadurch
zeit-zeit1 dasselbe ist wie zeit-zeit,
und weil zeit-zeit immer = Null ist,
ist automatisch immer
zeit2=0.
Tipp:
benenne mal zeit1 um in "zeitAlt"
und zeit2 benenne um in "delta_t"
dann wirds vielleich auch semantisch klarer.
Ich wollte über Zeit1=Zeit einen Wert für zeit1 unveränderlich für die darauffolgende While-Schleife festlegen.
IN der while-schleife dürfte doch zeit1 nicht verändert werden, aber zeit (davon unabhängig, weils im Hintergrund immer weiterläuft) ist variabel, oder verstehe ich das falsch?
Das sollte evtl. so funktionieren:
digitalWrite(yellow, HIGH); // gelbe Led an ?
zeit = millis() + 5000; // aktueller Zeitwwert + deine maximale Wartezeit 5 Sekunden
do // Schleifen
{
if (analogValue < 50) break; // Abbruch der Schleife wenn der Analogwert < 50 wird
} while (millis() < zeit); // ansonsten weiterschleifen bis millis den Wert von zeit überschreitet
// landet hier wenn die Zeit abgelaufen ist und/oder Analogwert kleiner 50 geworden ist.
digitalWrite(yellow, LOW); // gelbe Led aus ?
must natürlich dafür sorgen, das dein Analogwert noch innerhalb der Schleife irgendwie aktualisiert wird.
Siro
Danke, Siro. Das habe ich gemerkt, dass man in der Schleife den A/D Wandler weiter auslesen muss.
Und auch für deinen Code, werde ich mir anschauen und mir zueigen machen!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.