Pausen

Hallo ,ich hätte eine frage kann man z.b Pausen an bestimmte Zeilen im Code binden ?

void setup()
{
pinMode( 2 , OUTPUT);
pinMode( 4 , OUTPUT);
pinMode( 7 , OUTPUT);
}

void loop()
{
digitalWrite(2 , HIGH);
delay( 8000 );
digitalWrite(4 , HIGH);
delay( 2000 );
digitalWrite(7 , HIGH);
delay( 5000 );
}

so das sich die 8000 nur auf die 2 bezieht und nicht von den werten 2000 und 4000 geändert wird ??

Bin Neuling ^^

Sry, für die komische Schreibweise LRS und so .....

Hallo,

Du kannst das in eine Zeile schreiben

digitalWrite(2 , HIGH); delay( 8000 );

aber das ist sicher nicht Deine Frage.

beschreib doch mal das was Du vorhast, ich hab Deine Frage leider nicht verstanden. Du schaltest jetzt drei Ausgänge jeweils nach einer Pause ein. Nach dem ersten Durchlauf sind sie alle an , dann passsiert ja nichts mehr.

schau Dir die Beispiele in der IDE an , die fangen ganz einfach an. Spätestens nach ein paar Tagen solltest Du alledings delay() durch millis() ersetzten. Dazu gibts bilnkwitoutdelay als Beispiel.

Heinz

Danke für die Antwort eig hatte ich nur nen kleinen aufbau gemacht.

für den kleinern Bruder meiner Freundin, ich hatte einen servo mit einer led dran..

dann fragte er mich, wie ich einstelle das die Pause nicht für beide teile sind sonder ich separat einstellen kann

dass die pausen nur für das led oder den servo funktioniert,

weil wenn ich delay 1000 eingebe geht das ja für servo + Led.

Hallo,

verstanden hab ich das immer noch nicht sorry,

Vermutung

Du willst einen Servo hin und her fahren lassen jeweils mit einer Pause, zusätzlich soll eine LED irgendwann an und wieder aus gehen und das unabhängig von dem Servo. ?

Dazu braucht du millis().

Mit delay geht das nicht, weil der Programablauf bei delay() eine pause macht und sonst fast nichts mehr passiert. d.h wenn Du in einem delay() für den Servo festhängst kannst Du wärend der zeit nicht die LED einschalten.

such mal her im Forum nach Nachtwächter das erklärt dir millis().

Heinz

Rentner:
Hallo,

verstanden hab ich das immer noch nicht sorry,

Vermutung

Du willst einen Servo hin und her fahren lassen jeweils mit einer Pause, zusätzlich soll eine LED irgendwann an und wieder aus gehen und das unabhängig von dem Servo. ?

Dazu braucht du millis().

Mit delay geht das nicht, weil der Programablauf bei delay() eine pause macht und sonst fast nichts mehr passiert. d.h wenn Du in einem delay() für den Servo festhängst kannst Du wärend der zeit nicht die LED einschalten.

such mal her im Forum nach Nachtwächter das erklärt dir millis().

Heinz

ok danke das mache ich und sorry noch mal für das komplizierte schreiben ^^

Hallo ,ich hätte eine frage kann man z.b Pausen an bestimmte Zeilen im Code binden ?

Du möchtest einen, oder mehrere, endliche Automaten bauen.

Es gibt viele Wege nach Rom.
Hier ist einer davon.

Beispiel: (unabhängiges Blinken mit 3 LEDs)

/**
 * Drei unabhaengige Blinker
 */
#include <Streaming.h>
#include <CooperativeTask.h>
#include "BlinkTask.h"
#include "SchedulerLoopCountTask.h"

BlinkTask Blinker[]{// {pin,interval} 
                       {2,8000},
                       {4,2000},
                       {7,5000},
                   };     
void setup() 
{
 Serial.begin(9600);
 Serial.println("Start");
 Scheduler::instance().init();
}

void loop() 
{
  Scheduler::instance().run();
}

CooperativeTask.zip (11 KB)

Du könntest auch meine MobaTools verwenden. Zum einen kannst Du damit auch einen Servo langsam drehen lassen ( obwohl das in deinem Sketch noch garnicht vokommt...), zum anderen kannst Du mit der 'Eieruhr' (EggTimer) unabhängige Verzögerungszeiten realisieren ohne dich direkt mit millis() befassen zu müssen. Ein Beispiel dazu ist dabei. Installieren kannst Du die Lib über den Bibliotheksverwalter.

Delay() blockiert die Sketchausführung darum kann während der 8 Sekunden des delay(8000) nichts gemacht werden.
Du mußt, wie gesagt millis() verwenden.

Grüße Uwe

Ich glaube dem Threadersteller ist nicht klar das Programme sequentiell abgearbeitet werden.

Er will für das erste digitalRead eine Pause das die anderen beiden nicht tangiert (und v.v.)

Ulli

beeblebrox:
Ich glaube dem Threadersteller ist nicht klar das Programme sequentiell abgearbeitet werden.

Er will für das erste digitalRead eine Pause das die anderen beiden nicht tangiert (und v.v.)

Ulli

Hallo,

deshalb hat er jetzt mehrere Möglichkeiten

millis() die steinige Variante Vorteil er hats anschliessend verstanden
eine lib verwenden Vorteil schneller Erfolg, Nachteil nicht verstanden was passiert.

Entscheiden muß er selber. Solange er aber leider nicht im Stande ist seine Aufgabe verständlich zu beschreiben, wird er die Aufgabenstellung selber nicht verstanden haben. Aber das kann man alles lernen.

Aber wenn er die Beispiele systematisch durchrbeitet und fleissig in der Hilfe Referenz ließt wird das schon.

Wer offen für was Neues ist dem steht doch die Welt offen. Wer hat das nochmal gesagt ???? :wink:

ich wars nicht ( duk und weg) :neutral_face:

Heinz