Forum: Mikrocontroller und Digitale Elektronik delay zeit automatisch vergrößern?


von Dirk -. (dirkschn2014)


Lesenswert?

Guten Abend Gemeinde,

Da ich neu in dem Bereich bin habe ich eine kleine Frage zum 
Programmieren über Arduino IDE.

Und zwar gibt es ein Befehl womit ich den delay Zeitraum verkleinern 
kann.
z.B. ich habe 3 led,s nebeneinander die sollen alle nach einander 
leuchten, und wieder zurück zum angang also

  digitalWrite(blau, HIGH);
  delay(1000);
  digitalWrite(blau, LOW);
  digitalWrite(gruen, HIGH);
  delay(1000);
  digitalWrite(gruen, LOW);
  digitalWrite(rot, HIGH);
  delay(1000);
  digitalWrite(rot, LOW);
  digitalWrite(gruen, HIGH);
  delay(1000);
  digitalWrite(gruen, LOW);

usw....

nun möchte ich aber die pause, nach jeden Ablauf um ein beliebigen Wert 
z.B. 10ms verkürzen bis ich bei 0 angekommen bin.

Gibt es dafür einen kurzen befehl oder muss ich den Ablauf jetzt 100 mal 
dort hinschreiben und bei jeden Ablauf die Pause verkürzen?

Vielen Dank

von von Neumann (Gast)


Lesenswert?

Hallo,

Das nennt man Programmieren und ein andere Lösungsansatz - DEA - ohne 
Delay ! hilft Dir weiter.

von H.Joachim S. (crazyhorse)


Lesenswert?

Der Grundansatz ist natürlich schon mal Mist, aber der MC sonst nichts 
zu tun kann man das schon so machen.

delay () akzeptiert normalerweise nur Konstanten als Parameter.
Du baust dir also ein Unterprogramm mit einer Schleife und delay (1) und 
übergibst die gewünschte Verzögerungszeit als Argument.
Das UP arbeitet nun delay(1) x mal ab.

von F1 (Gast)


Lesenswert?

delay(x) macht x Millisekunden Pause. Verkleinert man x wird die Pause 
kürzer. Einfach oder?

Man kann für delay auch ohne weiteres eine Variable benutzen, wie:

wartezeit = 1000;
delay(wartezeit);
wartezeit = wartezeit - 10;
usw...

von Dirk -. (dirkschn2014)


Lesenswert?

das mit der Variable und der Wartezeit hat wunderbar geklappt was das 
verringern angeht.

Nun hapert es noch ein wenig beim aufwärts, sprich wenn er bei der die 
Wartezeit bei 0 angekommen ist soll sie in 10er schritten wieder hoch 
bis 1000ms gehen.

von Einer K. (Gast)


Lesenswert?

Tja...

Versuchs mal mit einer zählenden Schleife!
Tipp: Eine solche Schleife kann auch rückwärts zählen.

von Manfred (Gast)


Lesenswert?

Dirk N. schrieb:
> Nun hapert es noch ein wenig beim aufwärts, sprich wenn er bei der die
> Wartezeit bei 0 angekommen ist soll sie in 10er schritten wieder hoch
> bis 1000ms gehen.
Eine so schlechte Schreibweise ist schon mal erwähnenswert. Und Mut hast 
Du auch, eine so dusselige Frage zu stellen!

Befrage die Suchmaschine nach Arduino und arbeite Grundlagen ab. Arduino 
ist eine ganz tolle Umgebung, die immer wieder durch total faule Leute 
in Mißkredit gebracht wird - fühle Dich angesprochen.

von Dirk -. (dirkschn2014)


Lesenswert?

Manfred schrieb

> Eine so schlechte Schreibweise ist schon mal erwähnenswert. Und Mut hast
> Du auch, eine so dusselige Frage zu stellen!
>
> Befrage die Suchmaschine nach Arduino und arbeite Grundlagen ab. Arduino
> ist eine ganz tolle Umgebung, die immer wieder durch total faule Leute
> in Mißkredit gebracht wird - fühle Dich angesprochen.


Wieso ist das eine dusselige Frage?
Wie gesagt ich versuche gerade mir ein bisschen Wissen was Arduino 
angeht anzueignen. Und da musst du mir nicht mit irgendwelchen Sprüchen 
kommen.

Wozu sind die Foren denn da? Um Erfahrungen miteinander auszutauschen. 
Und da ich in dem Bereich kaum Erfahrung habe, wende ich mich an euch.

Und jedem können mal Schreibfehler unter kommen.

Und nur zu Info mein Sketch läuft.

von Einer K. (Gast)


Lesenswert?

Dirk N. schrieb:
> Und da ich in dem Bereich kaum Erfahrung habe, wende ich mich an euch.
Das kannst du ändern!

Dann lautet der Tipp:
Schaffe dir ein C/C++ Buch an, und lerne die Sprache.

von Dirk -. (dirkschn2014)


Lesenswert?

> Dann lautet der Tipp:
> Schaffe dir ein C/C++ Buch an, und lerne die Sprache.

Genau das werde ich tun. Trotzdem danke für die Tipps

von Manfred (Gast)


Lesenswert?

Dirk -. schrieb:
> Wieso ist das eine dusselige Frage?
> Wie gesagt ich versuche gerade mir ein bisschen Wissen was Arduino
> angeht anzueignen. Und da musst du mir nicht mit irgendwelchen Sprüchen
> kommen.
Sprüche und Wahrheit sind verschiedene Dinge.

> Wozu sind die Foren denn da? Um Erfahrungen miteinander auszutauschen.
Eben, Erfahrungen auszutauschen.

> Und da ich in dem Bereich kaum Erfahrung habe, wende ich mich an euch.
Du hast nicht "kaum Erfahrung", Du hast schlicht und einfach garkeine. 
Du hast noch nicht einmal einfachste_Grundlagen durchgearbeitet!

Ich habe mir 2015 zwei China-Unos kommen lassen, vier LEDs dran gelötet 
und Lauflicht gespielt. Dann habe ich stundenlang diverse 
Anfängerscripte bespielt, mir zwei Bücher besorgt und eigenständig 
"Blink ohne delay" bespielt, ein Display angesteuert, ein Drehpoti 
abgefragt und und und - ohne im Forum herumzukaspern. Dein "Problem" ist 
dermaßen billig, dass man es an einem Nachmittag eigenständig lösen 
kann.

Ich hätte bei meinen letzten zwei Projekten 17 Threads aufmachen können, 
was nicht erwartungsgemäß funktioniert. Ich habe es nicht getan, habe 
stattdessen Beschreibungen gesucht ('ergooglet') und mir eigenes Wissen 
erarbeitet. Gucke ich auf meine ehemaligen Lehrlinge, die waren im 
Endefekt stolz, Lösungen selbst gefunden zu haben anstatt dass ich sie 
ihnen vorgekaut hätte.

> Und jedem können mal Schreibfehler unter kommen.
Ich zähle die jetzt nicht durch und einzeln auf, aber mehr als ein 
Schreibfehler war das schon.

von ChrisMicro (Gast)


Lesenswert?

Hallo Dirk,

F1 schrieb
>wartezeit = 1000;
>delay(wartezeit);
>wartezeit = wartezeit - 10;
>usw...

Du kannst in etwa das Beispiel von F1 nehmen und die folgende Zeite ein 
wenig abändern:
1
wartezeit = wartezeit - aenderung;

Für das langsamer werden
1
aenderung = 10;

Für das schneller werden
1
aenderung = -10;

Dann musst du nur noch die Grenzen überprüfen:
1
if(wartezeit<0) aenderung = 10;
2
if(wartezeit>1000) aenderung = -10;

Viel Spaß damit.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Würde auf <Minwert+abs(aenderung) und >Maxwert-abs(aenderung) ändern, da 
so die Änderungsgeschwindigkeit beliebig (auch während des Ablauf) 
angepasst werden kann, ohne ein Überschwingen zu bekommen.

Nur ist mir nicht bekannt, wie die Absolut-Funktion des Arduino heißt 
(also vorzeichenlose Zahl)

MfG

von Spannungsteiler (Gast)


Lesenswert?

Hallo,
ich würde dir dies hier gerne aufs Herz legen :-))

http://www.mikrocontroller.net/attachment/279643/Arduino_Kochbuch__super_.pdf

von Thomas E. (thomase)


Lesenswert?

Manfred schrieb:
> Ich zähle die jetzt nicht durch und einzeln auf, aber mehr als ein
> Schreibfehler war das schon.

Genau:

Manfred schrieb:
> , Du

Manfred schrieb:
> garkeine.

Manfred schrieb:
> Endefekt

Aber sonst bist du ein ziemlich toller Typ.


Beitrag "Ruppiges verhalten - in techniklastigen Foren verbreiteter als in Foren mit anderen Themenbereichen"

: Bearbeitet durch User
von Dirk -. (dirkschn2014)


Lesenswert?

ChrisMicro schrieb
> Hallo Dirk,
>
> F1 schrieb
>>wartezeit = 1000;
>>delay(wartezeit);
>>wartezeit = wartezeit - 10;
>>usw...
>
> Du kannst in etwa das Beispiel von F1 nehmen und die folgende Zeite ein
> wenig abändern:
> wartezeit = wartezeit - aenderung;
>
> Für das langsamer werdenaenderung = 10;
>
> Für das schneller werden
> aenderung = -10;
>
> Dann musst du nur noch die Grenzen überprüfen:
> if(wartezeit<0) aenderung = 10;
> if(wartezeit>1000) aenderung = -10;
>
> Viel Spaß damit.

Das werde ich mal testen bzw. versuchen zu schreiben.



> Nur ist mir nicht bekannt, wie die Absolut-Funktion des Arduino heißt
> (also vorzeichenlose Zahl)

Was meinst du damit?


>       Hallo,
> ich würde dir dies hier gerne aufs Herz legen :-))
>
> http://www.mikrocontroller.net/attachment/279643/Arduino_Kochbuch__super_.pdf

Danke, Habe ich heruntergeladen und werde mir mal die Zeit nehmen und 
mir das durchlesen.

Thomas Eckmann schreibt

>       Manfred schrieb:
>> Ich zähle die jetzt nicht durch und einzeln auf, aber mehr als ein
>> Schreibfehler war das schon.
>
> Genau:
>
> Manfred schrieb:
>> , Du
>
> Manfred schrieb:
>> garkeine.
>
> Manfred schrieb:
>> Endefekt
>
> Aber sonst bist du ein ziemlich toller Typ.

Genau Thomas so sieht es aus, Manfred sollte erst die Fehler bei sich 
selbst suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.