Hallo,
momentan versuche ich bei sämtlichen meiner Projekte zu vermeiden, dass "Befehle" öfters gesendet werden, als dies notwendig ist. Jedoch würde ich mir bei einem Projekt nun ein Haufen Arbeit ersparen, wenn ich bestimmten LED den "Schaltbefehl" nicht nur einmal schicke, sondern permanent. Hier nur ein Beispiel zur Verdeutlichung:
void loop()
{
led_schaltung_einfach();
led_schaltung_permanent();
}
led_schaltung_einfach()
{
if(millis() == x)
{
digitalWrite(LED_1,LOW);
}
}
led_schaltung_permanent()
{
digitalWrite(LED_1,LOW);
}
Welche negativen Auswirkungen könnten sich daraus ergeben?
Zappelige LEDs?
Code wird langsamer durchlaufen?
Gruß Chris
abgesehen davon, dass
if(millis() == x)
überhaupt nicht gut ist, ist die Ausführungszeit von digitalWrite nicht sooo schlecht, dass man sie üblicherweise wegoptimieren müsste. Und flackern wird eine Led nicht dadurch, dass man den Pin mehrfach edit:mit dem gleichen Wert beschreibt.
Bei millis() sollte man immer berücksichtigen, dass ein loop Durchlauf mehr als 1 ms dauern kann, also immer mit >= statt mit == arbeiten. Ausserdem immer mit der Differenz zum Vergleichswert, damit ein Überlauf nicht weh tut:
const unsigned long INTERVALL = 500;
static unsigned long letztesMal;
if (millis() - letztesMal >= INTERVALL)
{
letztesMal = millis(); // alternativ: letztesMal += INTERVALL;
// ... hier das was einmal pro INTERVALL dran kommen soll ...
ledstatus = ! ledstatus; // invertieren
digitalWrite(LEDPIN, ledstatus);
}
Nachtrag:Alternativ: wenn du jedesmal ledstatus irgendwie ausrechnest, bringt es nichts zu überprüfen ob sich eine Änderung ergeben hat. Einfach den aktuellen Wert ausgeben, fertig.
digitalWrite() braucht etwa 4µs was ich sehen kann. Das ist langsam nur um einen Port-Pin zu schalten, aber in deinem Fall ist das absolut vertretbar. Das spielt nur eine Rolle wenn du das oft innerhalb kurzer Zeit machen musst. Bei so einem primitiven Programm ist das egal.
Mit dem Auge wäre das nicht zu sehen selbst wenn das flackern würde. Aber für den Controller keine Rolle wenn das Ausgangsregister nochmal mit 1 beschrieben wird.