millis() in if-Prüfung - was mache ich falsch

Moin Mitreisende,

ich möchte einen 'Fernseher' (im Modellbau) mittels PWM simulieren. Verbaut ist eine blaue 0805 LED mit 1,0k Vorwiederstand. Der Wechsel der Helligkeit soll mittels random in einem festgelegten Bereich erfolgen.

Dazu enthält mein Sketch folgendes

if (TVStatusOn == true)
  {
    // Wenn Zeit für Helligkeitswechsel erreicht ist
    if (millis() >= outChangeTime)
    {
      // Helligkeit des Bildes neu ermitteln
      Brightness = random(20, 155);
      // Startzeit des Helligkeitswechsels merken
      inChangeTime = millis();
      Serial.println("inChangeTime");
      Serial.println(inChangeTime);
      // Zeit bis zur nächsten Veränderung festlegen (der Fernseher soll ja nicht flimmern)
      outChangeTime = inChangeTime + random(800, 2550);
      Serial.println("outChangeTime");
      Serial.println(outChangeTime);
    }
    // wenn alles berechnet ist, den errechneten TVstatus setzen

    analogWrite(TVdata[0], Brightness);
  }
  else
  {
    analogWrite(TVdata[0], 0);

Aus der Aufzeichnung im seriellen Monitor kann ich aber erkennen, dass die Eingangsprüfung nicht korrekt beachtet wird. In der zweiten 'inChangeTime' ist die Zeit der davor liegenden 'outChangeTime' noch lange nicht erreicht.

16:16:27.578 -> inChangeTime
16:16:27.578 -> 50001
16:16:27.578 -> outChangeTime
16:16:27.611 -> 51550
16:16:27.611 -> inChangeTime
16:16:27.611 -> 50002
16:16:27.656 -> outChangeTime
16:16:27.656 -> 51510

Ich sehe einfach meinen Fehler nicht. Ihr doch sicher :slight_smile:

Merci for help

LG Oliver

Ohne mehr von deinem Sketch zu sehen, ist es schwierig oder unmöglich eine Aussage zu treffen. Poste bitte deinen Sketch in Codetags.

@TO: Suche mal nach belebtes Haus.

Gruß Tommy

Millis() ist vermutlich immer größer, sobald es mal läuft und dadurch wird es ausgeführt. Millis ist die Zeit seit start des Arduino.

Du musst, wenn ich das richtig überblicke, was Du willst, einen Timer bauen und Abfragen ob der abgelaufen ist wie z.B.:

int ErrorLEDTime = 400;                 // Zeit die die LED an oder aus sein soll (400ms)
unsigned long ErrorLEDTimer = 0;   // Timer der die verstrichene Zeit misst


BlinkError();


void BlinkError() {
  if (millis() - ErrorLEDTimer >= ErrorLEDTime) {     // Dein Millis Problem
    ErrorBlink();
    ErrorLEDTimer = millis();                      // Timer speichert die aktuelle Millis-Zeit um beim nächsten Durchlauf zu sehen ob die gewünschte Zeit bereits verstrichen ist
  }
}

millis() - ErrorLEDTimer ist sozusagen Aktuelle Zeit - die Zeit als der Timer gestartet wurde (also die dazwischen vergangene Zeit). Die muss größer sein als die gewünschte Zeit (also bei dir die erste+random)

Hi

Damit hast Du genau 1 Arduino pro LED - sonderlich durchdacht ist der Programmierstil nicht - der Arduino hat noch ein Dutzend mehr Pins, Die jetzt aber arbeitslos bleiben, da dieser Sketch NICHTS ANDERES mehr machen kann, außer EINEN Fernseher zu simulieren.

... Das bekommt man mit einem 8-Beiner (z.B. ATtiny85) Platz und Geld-sparender hin.

MfG

Das war ein BEISPIEL damit er weiß was er vermutlich falsch macht OMG

Moin Mitreisende,

Das war ein BEISPIEL damit er weiß was er vermutlich falsch macht

Eben, die anderen Pins des Arduino sind sehr wohl - zumindest weitgehend - belegt.

@Gorkde, so ähnlich habe ich es jetzt gemacht. Daneben auch die beiden Werte des Randombereiches vergrößert, dass sieht jetzt schon recht gut aus.

Merci

LG Oliver

Das freut mich!

Und man muss nicht immer das ganze Programm haben wenn man überlegt was der Thread-Ersteller will und sein Programm ansieht.
Also nicht immer gleich ohne zu gucken "das und das fehlt" schreien sondern erstmal gucken Leute! Mir ist bewusst das oft das entscheidende fehlen kann, aber oft sieht man den Fehler auch wenn man mal so guckt und wenn nicht, kann man immer noch schreien.

Gorkde:
Und man muss nicht immer das ganze Programm haben wenn man überlegt was der Thread-Ersteller will und sein Programm ansieht.
Also nicht immer gleich ohne zu gucken “das und das fehlt” schreien sondern erstmal gucken Leute! Mir ist bewusst das oft das entscheidende fehlen kann, aber oft sieht man den Fehler auch wenn man mal so guckt und wenn nicht, kann man immer noch schreien.

Mach nicht auf Oberlehrer.
Grüße Uwe

Alles nur ein Missverständnis!

Die Antwort von "postmaster-ino" in #4 bezog sich auf einen Sketch mit delay, der daraufhin aus diesem Thread gelöscht wurde.

Nun aber sah es aus als ob der Beitrag sich auf #3 bezieht.

Was "Gorkde" natürlich missfällt.

@postmaster-ino Ein Quote vom delay Sketch, wäre hier hilfreich gewesen.

Gruß Fips

Hi

Dem stimme ich im Grunde zu - nur hoffte ich, daß wir hier erwachsen genug sind, daß wir auch mit eigenen Fehlern - gerade, wenn Diese für Anfänger nur zu verlockend sind, umgehen kann - wenn statt Dessen der Fehler aus dem Internet gelöscht wird, ist's halt nie passiert.

Ok, ab heute immer mit Quote (Dich zitiere ich jetzt aber Mal nicht, oder besser doch?)
Ab wann mit Gender-Sternchen?

MfG

postmaster-ino:
.... der Fehler aus dem Internet gelöscht wird, ist's halt nie passiert.

und ich dachte, das Netz vergisst nichts. Die NSA hat bestimmt noch eine Kopie, da könnte man den benötigten Quote rauskopieren :smiling_imp:

… verdammt … ‘Ok Google … suche mir den Post soundso von daundda’.
Oder Alexa?
Nicht, daß ich den falschen Spionage-Assistenten frage … man will ja nicht unangenehm auffallen …