Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Ach schick, ist ja eine Lösung von mir
Ja, in der Lösung #13 steht unten ein Satz, der darauf verweist, dass vorher bereits ein vollständiger Sketch vorhanden war.
Wie @agmue schrieb, ist der vollständige Code in #5
Da der Code von mir kam kann ich da ggfls. auch noch was zu sagen, wenn Du Fragen hast.
Habe den fehlenden Teil nun zusammengeführt. Können Sie, wenn es nicht zu viele Umstände macht, den Code noch mit Kommentaren versehen, zum besseren Verständnis.
Vielen Dank
const byte relStunde = 2; // Pin Belegung am Arduino
const byte relVorStunde = 3; // Pin Belegung am Arduino
const byte relS[] = {relStunde, relVorStunde};
enum {an, aus};
const unsigned long stunde = 3600000; // Zeit in ms
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
for (byte b = 0; b < sizeof(relS); b++)
{
digitalWrite(relS[b], LOW);
pinMode(relS[b], OUTPUT);
digitalWrite(relS[b], aus);
}
digitalWrite(relStunde, an);
}
void loop()
{
stundenTick();
zweiStundenTick();
}
void stundenTick()
{
const unsigned long laufzeit = 30000;
static unsigned long lastAusloeser = 0;
if (millis() - lastAusloeser >= stunde)
{
lastAusloeser += stunde;
digitalWrite(relStunde, an);
}
if (digitalRead(relStunde) == an)
if (millis() - lastAusloeser >= laufzeit)
digitalWrite(relStunde, aus);
}
void zweiStundenTick()
{
const unsigned long laufzeit = 300000; // Zeit in ms
const unsigned long vorlauf = laufzeit / 2;
static unsigned long lastAusloeser = 0;
if (millis() - lastAusloeser >= stunde * 4 - vorlauf)
{
digitalWrite(relVorStunde, an);
lastAusloeser += stunde * 4 - vorlauf;
}
if (digitalRead(relVorStunde) == an)
if (millis() - lastAusloeser >= laufzeit)
{
digitalWrite(relStunde, aus);
lastAusloeser += laufzeit;
}
}
Mit Sie hat mich auch schon sehr lange keiner mehr angesprochen
Wenn Du den Codeteil bitte so formatierst, dass der benutzbar ist. Ja.
-> Mit dem Bleistift nochmal in den Post gehen, den Codeteil markieren -(NUR DEN CODE) und dann oben auf den Button <code> klicken, speichern, fertig.
Beim nächsten Mal in der IDE -> bearbeiten - für Forum kopieren -> dann ersparst Du Dir die Arbeit
Ich antworte Dir nicht mer, wenn Du mich weiter siezt
Ich habe gelernt mit Structuren und Arrays umzugehen und Funktionen kann man Parameteer übergeben was ggfls. dazu führt eine Funktion mehrfach zu verwenden
okay, kannst du mir bitte noch sagen, wo ich in den Schleifen den Serial.print () einfüge, bzw wäre es hilfreich zu sehen, wie lang es noch dauert, bis die nächste Auslösung des Relais ist.
Im Setup ist bereits Serial Print definiert somit müsste es wahrscheinlich in jeder der beiden Schleifen VoidStundenTick eingefügt werden und hier weis ich nun nicht weiter.
Vielen Dank
Hallo, danke für die Erstellung von dem Code. Übersichtlicher finde ich den Code im 4 Stunden Tick. Im 1Stunden Tick weiß ich nicht worauf du anspielst. Habe es gerade in den Arduino hochgeladen und lass es laufen. Kann an dem seriellen Monitor erst einmal nichts erkennen. Was jedoch auffällt, ist dass nach dem ersten Durchlauf und anschließendem erneuten Durchlauf der 4StundenTick das Relais länger an ist. .
Die Zeit im 1Stundentick läuft unabhängig von der tatsächlichen Arbeitszeit runter.
Es sind also zwei Funktionen, die das gleiche machen sollen, aber voneinander getrennt sind.
Du bekommst wenn Du Pech hast auf dem SerMon noch mit, dass es angeblich 2 Sekunden bis zum Schaltpunkt sind, Und dann fängt er von vorn an zu zählen, weil die Schaltung schneller war
Da entscheidet eine ms. Wenn in der letzten Sek. die Zeit abläuft, schaltet er zuerst und kommt dann nicht mehr zur Ausgabe
Und ja, die erste Schaltung ist kürzer, da wir nicht in der Vergangenheit anfangen.
Kann man ändern...
Guten Morgen, danke für die ausführlichen Antworten. Da ich den Code in seiner gänze verstehen möchte und nicht alles wild zusammenkopieren mag, mit mäßigem Erfolg, hätte ich noch eine Frage zur for Schleife am Anfang die über ein Array der beiden Relais beeinflusst wird.
Wie lange oder wie oft wird mit b++ um eins hoch gezählt, bis die Bedingung erfüllt ist?
Ich glaub, das ist die falsche Frage.
Die richtige Antwort:
Es wird solange b aufaddiert, bis die Bedigung nicht mehr erfüllt ist.
In dem Fall wird b nicht größer als 1.
relS enthält 2 Elemente.
Das erste Element beginnt mit 0!!!
relS[0] -> erstes Element
relS[1] -> zweites Element
Beide Elemente werden in der dazugehörigen Funktionsschleife initialisiert .
Wenn b 1 wird, ist die letzte Bedingung erfüllt, danach wird die Funktion verlassen.