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.
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)
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.
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.
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?
... 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 ...