Hallo miteinand,
ich habe hier eine Relais Schaltung und bekomme die Schleife nicht hin.
const uint8_t OPENER_INPUT_PIN 21 //Wire from small keypad relay, switched to GND while active
const uint8_t OPENER_RELAY_PIN 27 //Switch door opener relay on if LOW
unsigned long opener_checkInterval = 5000; //5 seconds in millis
unsigned long opener_lastInterval = 0;
typedef struct {
char relay_name[17] = {'\0'};
uint8_t relay_pin = 0; //Relay GPIO
uint8_t relay_type = 0; //0=Active_Low, 1=Active_High, 2=WiFi
uint8_t relay_state = 0; //0=off, 1=on
uint8_t relay_mode = 0; //0=automatic, 1=manual
} Relay;
Relay opener_relay;
void setup() {
opener_relay.relay_pin = OPENER_RELAY_PIN;
pinMode(OPENER_INPUT_PIN, INPUT_PULLUP);
pinMode(opener_relay.relay_pin, OUTPUT);
digitalWrite(opener_relay.relay_pin, HIGH);
opener_relay.relay_state = 0;
}
void loop() {
...
//Mini Relais der Steuerung zieht OPENER_INPUT_PIN auf LOW
//Relais an GPIO27 zieht an
if (digitalRead(OPENER_INPUT_PIN) == LOW) {
digitalWrite(opener_relay.relay_pin, LOW);
opener_relay.relay_state = 1;
//Im Notfall soll das Relais spätestens nach 5 Sekunden abschalten,
//um den angeschlossenen Verbraucher nicht zu überlasten
//danach aber wieder ganz normal zur Verfügung stehen
if (millis() - opener_lastInterval > opener_checkInterval && (opener_relay.relay_state == 1)) {
digitalWrite(opener_relay.relay_pin, HIGH);
opener_relay.relay_state = 0;
opener_lastInterval = millis();
}
}
else {
digitalWrite(opener_relay.relay_pin, HIGH);
opener_relay.relay_state = 0;
}
}
Die Problemstellung steht als Kommentar im loop(). Ich kriege es einfach nicht hin.