Hallo ich brauch Hilfe beim programmieren von einem sketch.
Ich möchte über einen DigiSpark ein Relais mit mehreren pins ansteuern(auf jedem Pin soll eine andere Zeitspanne sein z.B.auf Pin2 15sec an 15min aus;auf Pin3 1min an 15min aus usw.), darf aber kein delay benutzen sonst bleibt es stecken.
Könnt ihr mir vielleicht helfen?
Johnny00702:
Ich möchte über einen DigiSpark ein Relais mit mehreren pins ansteuern(auf jedem Pin soll eine andere Zeitspanne sein z.B.auf Pin2 15sec an 15min aus;auf Pin3 1min an 15min aus usw.), darf aber kein delay benutzen sonst bleibt es stecken.
Könnt ihr mir vielleicht helfen?
Dann schau dir BlinkWithoutDelay in der IDE an, damit kannst du das lösen.
Das mit den mehreren Pins verstehe ich nicht. Willst Du ein Relais mit mehreren Pins ansteuern (warum?) oder über mehrere Pins als Eingang verschiedene Zeiten für das Relais ansteuern?
Du kannst doch auch das Relais fest an einen Pin schalten (über Transistor) und im Programm die verschiedenen Zeiten einstellen. z.B. über einzelne Taster oder vom PC über die Serielle (USB) Schnittstelle.
Umstecken ist immer die fehlerträchtigste Lösung(Kontaktprobleme).
Danke für die Tips,aber ich wollt es eher so machen das auf jeden pin ein Relais liegt und jedes Relais mit unterschiedlichen festgelegten Intervallen schaltet.
Johnny00702:
Danke für die Tips,aber ich wollt es eher so machen das auf jeden pin ein Relais liegt und jedes Relais mit unterschiedlichen festgelegten Intervallen schaltet.
Mit freundlichen Grüßen J.007
Ok, wenn wir helfen sollen, müssen wir den bisherigen Sketch sehen.
Poste den bitte in Code-Tags.
Sry ich hab mich falsch ausgedrückt...
Ich hab den sketch von dem Programm "Blink without delay".Leider ist die Ausschaltzeit = Einschaltzeit.
Was muss ich ändern wenn ich eine unterschiedliche Intervallzeit festlegen möchte.
Johnny00702:
Hallo ich brauch Hilfe beim programmieren von einem sketch.
Ich möchte über einen DigiSpark ein Relais mit mehreren pins ansteuern(auf jedem Pin soll eine andere Zeitspanne sein z.B.auf Pin2 15sec an 15min aus;auf Pin3 1min an 15min aus usw.), darf aber kein delay benutzen sonst bleibt es stecken.
Könnt ihr mir vielleicht helfen?
Für Deinen Relais-Sketch würde dabei eigentlich nur fehlen, die Datenstruktur so zu erweitern, dass die Einschaltdauer und die Periodendauer in long statt uint16_t angegeben werden, und dass es ein Array an Daten gibt, das in einer for-Schleife abgearbeitet wird.
Und es fehlt die Angabe, ob Deine Relais "active LOW " schalten, also ob das Relais bei LOW ein- und bei HIGH ausgeschaltet ist, oder ob die Relais "active HIGH" schaltet, also genau umgekehrt (HIGH schaltet ein und LOW schaltet aus). Vielleicht kannst Du das ja nochmal mitteilen.
Vielen dank jurs,das Programm hat sehr geholfen aber ich komm immer noch nicht ganz damit zurecht.
Ich arbeite mit Arduino erst seit ein paar Wochen...
Deswegen verstehe ich das noch nicht sehr gut.
Kannst du mir erklären was ich verändern muss?
Wenn dir Jurs' Lösung zu kompliziert ist, verstehst du denn Tommys Lösung?
Falls ja, kannst du die auf zwei Pins erweitern?
Ich hätte übrigens den BlinkWithoutDelay-Ansatz so abgeändert, dass jeder Zyklus die Ein- und Aus-Phase zusammen enthält. Finde ich einfacher. ( "Aus" ist dann der Rest des Zyklus nach "Ein" )
const unsigned long PERIODE1 = 5000;
const unsigned long EIN1 = 2000; // 2 sec an, 3 sec aus
void setup() {
pinmode(1, OUTPUT);
}
void loop() {
zyklus1();
}
void zyklus1() {
static unsigned long start; // static: jeder zyklus hat seine eigene Variable, auch wenn alle gleich heissen
if (millis() - start >= PERIODE1) start = millis();
if (millis() - start < EIN1) digitalWrite(1, HIGH);
else digitalWrite(1, LOW);
}
Kleiner Tip: Alles mit 1 verdoppeln, und aus der 1 eine 2 machen, fertig
Kann man dann noch optimieren, aber das wäre dann ja jurs' Lösung