INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Blink Without Delay - mal anders erklärt
31.10.2015, 19:23
Beitrag #1
Blink Without Delay - mal anders erklärt
Hallo,
immer wieder stören Delays den Programmablauf.

Wie man diese Delays vermeidet ist im Tutorial Blink Without Delay erklärt.
Scheinbar kommt aber nicht jeder mit dieser Anleitung gut zurecht. Vielleicht auch weil mehr erklärender Text als Programmcode darin enthalten ist.

Deshalb stelle ich hier eine Anleitung vor die das Prinzip anhand von Beispielen erklärt und dabei Kommentare auf das Wesentliche reduziert.

Code:
/*
Blink Without Delay - anhand von Beispielen erklärt
fünf parallel laufende, voneinander unabhängige, unterschiedliche Zeiten

!!! Variablen zum speichern von Zeiten aus millis() und micros() immer 'unsigned long' deklarieren !!!

*/


// Variablen deklarieren in denen die Startzeiten
// der einzelnen Zeitfunktionen gespeichert werden
unsigned long startzeit_1 = 0;
unsigned long startzeit_2 = 0;
unsigned long startzeit_3 = 0;
unsigned long startzeit_4 = 0;
unsigned long startzeit_5 = 0;

// Definitionen der einzelnen Schaltzeiten
#define        laufzeit_1   1234UL
#define        laufzeit_2   2345UL
#define        laufzeit_3  54321UL
#define        laufzeit_4   1111UL
#define        laufzeit_5     22UL

// Die Anschlusspins der einzelnen LEDs festlegen
const int led_1 = 10;
const int led_2 = 11;
const int led_3 = 12;
const int led_4 = 13;

// Pins als Ausgang
void setup() {
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
}

void loop() {


// laufzeit_1 EIN, laufzeit_1 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
if (millis() - startzeit_1 >= laufzeit_1) {
  startzeit_1 = millis();
  digitalWrite(led_1, digitalRead(led_1) ^ 1);
}




// laufzeit_2 EIN, laufzeit_2 AUS - LED schalten in Funktion - Schaltzeiten in Millisekunden
if (millis() - startzeit_2 >= laufzeit_2) {
  startzeit_2 = millis();
  led2();
}




// laufzeit_3 EIN, laufzeit_3 AUS - LED schalten in loop - Schaltzeiten in Microsekunden
if (micros() - startzeit_3 >= laufzeit_3) {
  startzeit_3 = micros();
  digitalWrite(led_3, digitalRead(led_3) ^ 1);
}




// asymetrische Zeiten - laufzeit_5 EIN, laufzeit_4 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
if (!digitalRead(led_4) && millis() - startzeit_4 >= laufzeit_4 ) {
  startzeit_5 = millis();
  digitalWrite(led_4, digitalRead(led_4) ^ 1);
}
if (digitalRead(led_4) && millis() - startzeit_5 >= laufzeit_5 ) {
  startzeit_4 = millis();
  digitalWrite(led_4, digitalRead(led_4) ^ 1);
}



}

// Unterprogramm für Led 2
void led2() {
digitalWrite(led_2, digitalRead(led_2) ^ 1);  
}

Für den der es nachbauen und testen will:
Das Programm verwaltet fünf parallel laufende, voneinander unabhängige, unterschiedliche Zeiten die den Programmablauf nicht blockieren.
Vier LEDs werden an den Pins 10, 11, 12 und 13 mit Vorwiderstand angeschlossen.
Die LED an Pin 10 blinkt mit einer Impuls- / Pausenzeit von 1234 Millisekunden.
Die LED an Pin 11 blinkt mit einer Impuls- / Pausenzeit von 2345 Millisekunden.
Die LED an Pin 12 blinkt mit einer Impuls- / Pausenzeit von 54321 Microsekunden.
Die LED an Pin 13 blinkt mit einer Impulszeit von 22 Millisekunden und einer Pausenzeit von 1111 Millisekunden.

Viel Spaß damit
Arne

Gruß Arne
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2018, 13:57
Beitrag #2
RE: Blink Without Delay - mal anders erklärt
Hallo Arne, bin der Georg und ganz neu hier im Forum, kurz und bündig, besitze Arduino uno3r und dein Beitrag finde für mich sehr aktuell weil habe die meisten Lektionen aus der mitgelieferter CD schon hinter mir aber irgendwie klappt das nicht.
Gehöre zu der älterer Generation die kaum in der Richtung Erfahrung gesammelt hat deswegen auch kein wunder das ich ständig stolpere über auch kleine dinge. Habe geschafft eine LED mit zwei Tester ein u. ausschalten, auch 8LEDs mit Hilfe des IC7HC595 zum laufen bringen, die Laufzeit kürzen u. verlängern aber konnte nicht die zwei Taster in das System integrieren so das mit 1 Taster könnte die zum laufen bringen und mit dem zweiten stoppen und noch variabel die zeit einzelnen LED einstellen. Um besser zu verstehen wie das alles funktioniert möchte mir ein Verdrahtungsplan für deine LEDs sehr helfen. Möchte dann die Möglichkeit zum Vergleich haben.
Gruß Georg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2018, 14:52
Beitrag #3
RE: Blink Without Delay - mal anders erklärt
Hallo Georg,
Übung macht den Meister. Wink

Wenn es Dir hilft, nimm diesen Schaltplan zum obigen Programmbeispiel.

   

Gruß Arne
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2018, 18:08
Beitrag #4
RE: Blink Without Delay - mal anders erklärt
Warum sollen die Zeiten immer als unsingned long definiert werden?

Danke, Claus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2018, 18:16
Beitrag #5
RE: Blink Without Delay - mal anders erklärt
(06.02.2018 18:08)Claus_M schrieb:  Warum sollen die Zeiten immer als unsingned long definiert werden?

Danke, Claus
Weil sie sonst überlaufen bzw. als negativ interpretiert werden.

Die Intervalle kannst Du wenn sie klein genug sind als unsigned int nehmen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2018, 20:47
Beitrag #6
RE: Blink Without Delay - mal anders erklärt
Hallo Arne,
Zitat:Wie man diese Delays vermeidet ist im Tutorial Blink Without Delay erklärt.
Scheinbar kommt aber nicht jeder mit dieser Anleitung gut zurecht.

Und Du gehst davon aus, dass die Neulinge Deine Version mit dem XOR Operator eher besser verständlich finden werden? Huh
Gruß
Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2018, 00:13
Beitrag #7
RE: Blink Without Delay - mal anders erklärt
(06.02.2018 18:16)Tommy56 schrieb:  
(06.02.2018 18:08)Claus_M schrieb:  Warum sollen die Zeiten immer als unsingned long definiert werden?

Danke, Claus
Weil sie sonst überlaufen bzw. als negativ interpretiert werden.

Die Intervalle kannst Du wenn sie klein genug sind als unsigned int nehmen.

Gruß Tommy

Danke für die Erklärung, Tommy. Toll, das ihr uns so unterstützt. Wir können froh sein, das Ihr euch die Mühe macht unsere Fragen zu beantworten.

LG, Claus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2018, 01:53
Beitrag #8
RE: Blink Without Delay - mal anders erklärt
(06.02.2018 14:52)ardu_arne schrieb:  Hallo Georg,
Übung macht den Meister. Wink

Wenn es Dir hilft, nimm diesen Schaltplan zum obigen Programmbeispiel.
Hallo Arne, zuerst vielen dank für deine Antwort, kam heute spät zu meiner Bastelecke an aber sofort ging los mit der Bastelei. Leider war ich nicht in der Lage die Programmierung korrekt anzuwenden, bin zu frisch auf diesem Gebiet deswegen auch kein wunder werde erwarten das über eine Nacht mindesten teilweise die begreife. Bis jetzt bin noch am üben und einen kleinen Erfolg habe auch zu melden, habe zu einem Programm mit 3LEDs die vierte dazugeschrieben und es hat geklappt,
Gruß Georg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  XOR erklärt Tommy56 4 857 18.03.2018 17:27
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste