Das Wesentliche beim BlinkWithoutDelay ist der Merker "previousMillis" und die Differenzbildung.
Für zwei unabhängige Zyklen brauchst du natürlich zwei solcher Variablen.
Und dein Sketch geht noch deutlich kürzer und damit verständlicher ![]()
Das Wesentliche beim BlinkWithoutDelay ist der Merker "previousMillis" und die Differenzbildung.
Für zwei unabhängige Zyklen brauchst du natürlich zwei solcher Variablen.
Und dein Sketch geht noch deutlich kürzer und damit verständlicher ![]()
@michael_x Mir ist leider bewusst, dass das ganze sehr unsauber programmiert ist. Das kommt durch mangelndes Wissen und ausprobieren.
Nur bei den Millis tue ich mir echt schwer
Da millis()-tropfenstart immer 0 ist, kommt TropfenB nie dran.
Was ist die Aufgabe der Funktion tropfen?
Soll sie den Ausgang eine kurze Zeit offen halten, und mehrfach verwendet werden können?
Dann braucht sie als Parameter
Wenn sie außerdem den Tropfzyklus steuert, braucht sie auch noch diese Zeit und muss die erste Zeit setzen können (Reference statt Value oder Rückgabewert).
Hier mal mit Rückgabewert:
unsigned long tropfen(unsigned long start,unsigned long zyklus, byte pin) {
const byte dauer=300;
unsigned long now=millis();
if (now - start < dauer) digitalWrite(pin, HIGH);
else digitalWrite(pin, LOW);
if (now - start >= zyklus) start = now;
return start;
}
Die Funktion wird immer aufgerufen, den Rückgabewert im nächsten loop Durchlauf mitgeben.
Du hast jetzt quasi meine "tropfen-Funktion" in die Klammer hinter tropfen ausgelagert, richtig?
Die Funktion "tropfen" soll das Ventil entsprechend der hinterlegten Zeit bei Tropfen1 bzw T2 offen halten. Wobei die Zeit letztlich über ein Drehregler eingestellt werden soll. Das Prg hatte ich nur soweit verkürzt, das ich das entsprechend wieder anpassen kann.
Das ganze soll per Taster einmalig aufgerufen werden
Mein Problem ist denke ich, das ich in den doch sehr simplen Delay-Ablauf stecke und das PRG für millis großflächig geändert werden muss.
Hallo timothybk
Suchst du eine Ansteuerung der Blitzeinrichtung mit variabler Frequenz?
Hallo @paulpaulson ,
nein, eine Freuqenz wäre fest definiert und wiederkehrend. Ich möchte ein Programm schreiben, welches ein Magnetventil unterschiedlich steuert.
Starttaste
Magnetventil auf nach X ms zu
"kann Option Anfang
Pause A
Magnetventil auf nach Y ms zu
Pause B
Magnetventil auf nach Z ms zu
kann Option Ende"
Blitzauslösung
Im ersten Post ist das aktuell verwendete Programm, durch die Verrechnung von verschiedenen Delay-Werten bleibt das Programm hängen und zerschießt mir das Display
Hallo timothybk,
was mir an Deiner Verkabelung auffällt, Du benutzt für alles gleich "dünne" Drähte.
Wieviel Strom zieht die 5V-Spule des Ventil (Datenblatt) ?
Je nach "Stromführung" durch die Kabel kann es zu einer Anhebung des GND kommen (Spike) wenn durch die Spule entsprechend viel Strom fließt, und dass kann dazu führen dass der Processor aus dem Tritt kommt und ebenso das Display. Würde evtl. die Hieroglyphen auf dem Display erklären.
Wie ist die Kabelführung des GND vom Netzteil zur Spule, Display und zum Arduino ?
Hast Di alles in Reihe verbunden, oder als Stern?
z. B.
GND:Netzteil ---- Arduino ----- Display ----- Spule (Ventil)
oder
_______ Arduino
/
GND:Netzteil /------------ Display
________ Spule (Ventil)
Die Kabel für den GND vom Netzteil zur Spule würde ich je nach Strom der Spule und
Kabellänge entsprechend dicker ausführen. ![]()
@z3-eagle Grüß Dich,
die Maße wird an einem Punkt zusammen geführt und ist nicht in Reihe angeschlossen.
Bei Plus sieht es ähnlich aus, wobei wir hier einmal 12V für das Magnetventil (140mA max.) und den Arduino (der Mega2560 kann das lt. Datenblatt ab) haben und einmal einen Knotenpunkt für 5V mittels Spannungswandler für Display, Encoder & die Taster abgezweigt.
Der Kabelquerschnitt beträgt 0,35mm², hier hatte ich mich an dem Anschlusskabel des Magnetventiles orientiert.
Gruß
Timo
Vielen Dank für die Unterstützung, leider gehen mir die Erklärungen nicht tief genug, sodass ich das Verständnis für die Programmierung nicht aufbauen kann.
Daher habe ich mich dazu entschlossen, mir im realen Leben Hilfe zu holen.