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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dirk -. (dirkschn2014)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

von H.Joachim S. (crazyhorse)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Tja...

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

von Manfred (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (Firma: Thomas Eckmann Informationst.) (thomase)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.