Welches Relais?
Also Nein! ?
Nein. Natürlich ist nicht beabsichtigt, dass die Pumpen ohne Grund anlaufen und sich die Klinke geben

Ich benutze ein Relais Shield, welches meine 230-Verbraucher schaltet. Diese Relais Pins sind HIGH-aktiv und schalten meine beiden 230V Pumpen sowie meine 230V-Wegeventile.
Meine beiden Sensoren sind LOW-aktiv. Daher hast du natürlich recht und es muss
> "taskWaitFor(!digitalRead(inPin));" oder wie du schreibst ""taskWaitFor(not digitalRead(inPin));"
heißen.
PINS 2 und 3 sind LOW-aktiv (IR-Sensoren)
PINS 4, 5, 6 und 7 sind HIGH-aktiv (Relais-Shield - 2 Pumpen (7 und 5) und 2 Wegeventile zur Druckentlastung (6 und 4))
PINS 8 und 9 sind meine beiden Taster (Schließer), die für die manuelle Betätigung genutzt werden. (Wenn jeweils betätigt, dann zugehörige Pumpe und Druckentlastung an)
#include <CooperativeTask.h>
/*-------------------------Pumpe----------------------------*/
class Pumpe: public Task
{
protected:
const byte inPin;
const byte outPin;
const byte entlastungPin;
const unsigned long laufZeit;
const unsigned long pauseZeit;
const unsigned long entlastungZeit;
public:
Pumpe(const byte inPin,const byte outPin,const byte entlastungPin,const unsigned long laufZeit,const unsigned long pauseZeit,const unsigned long entlastungZeit):
inPin(inPin),
outPin(outPin),
entlastungPin(entlastungPin),
laufZeit(laufZeit),
pauseZeit(pauseZeit),
entlastungZeit(entlastungZeit)
{
}
virtual void init() override
{
pinMode(inPin,INPUT_PULLUP);
pinMode(outPin,OUTPUT);
pinMode(entlastungPin,OUTPUT);
}
virtual void run() override
{
TaskBlock
{
taskWaitFor(!digitalRead(inPin));
digitalWrite(outPin,HIGH);
taskPause(laufZeit);
digitalWrite(outPin,LOW);
digitalWrite(entlastungPin,HIGH);
taskPause(entlastungZeit);
taskPause(pauseZeit-entlastungZeit);
}
}
};
Pumpe pumpen[] { // {inPin, outPin, entlastungPin, laufZeit, pauseZeit, entlastungZeit}
{2, 7, 6, 2000, 3000, 300},
{3, 5, 4, 2000, 3000, 300}
};
/*-----------------------------------------------------*/
void setup()
{
Scheduler::instance().init();
}
void loop()
{
Scheduler::instance().run();
}
UPDATE:
Also... das Programm funktioniert soweit, BIS die 230V scharf geschaltet werden (Stinknormaler Nockenschalter mit Sicherung etc). Ist die 230V-Spannungsquelle nicht aktiv, funktioniert alles soweit wie es soll. Ich löse mittels Handbewegung einen beliebigen Sensor aus, das zugehörige Relais wird geschaltet, die Laufzeit passt und die Druckentlastung findet auf dem anderen Relais ebenfalls statt. Beide Kreise funktionieren, auch unabhängig voneinander. (zu beobachten an den Relais-Shield LED´s).
Jetzt kommt´s aber:
Ich lege den Nockenschalter um und habe die 230V an meinen Verbrauchern. Löse ich mittels Handbewegung einen Ablauf aus, funktioniert dieser zwar soweit, ABER der zweite Kreis wird im Anschluss ebenfalls direkt ausgelöst! Dies passiert beidseitig. Läuft Kreis 1 an, kommt Kreis 2 direkt im Anschluss und umgekehrt.
Habt ihr eine Ahnung woran das liegen kann? Die Relais schalten meine Spannung doch nur durch? Die Relais auf dem Shield sollten normalerweise die 230VAC verkraften.
Relais 4 fach