/*----------------------------------------------------------------------------- * Ausgang für Rollladen einschalten * Schaltet sich nach 30 s automatisch ab */ void DigOutShade(TDigOutShadeNumber number, TDigOutShadeAction action) { TDigOutNumber onSwitch; TDigOutNumber dirSwitch; onSwitch = sShade[number].onSwitch; dirSwitch = sShade[number].dirSwitch; if ((onSwitch == eDigOutInvalid) || (dirSwitch == eDigOutInvalid)) { return; } switch (action) { case eDigOutShadeOpen: /* Richtungsrelais soll sich ebenfalls ausschalten */ /* mit größerer Verzögerung, damit sichergestellt ist, dass */ /* nicht bei abschalten kurz in die andere Richtung gefahren */ /* wird */ /* 1. Strom (on) AUS */ /* 2. Richtung (dir) EIN mit Verzögerung */ /* 3. Strom (on) EIN mit Verzögerung kurz nach Richtung EIN */ /* 4. Warten (30 s) */ /* 5. Strom (on) AUS */ /* 6. Richtung (dir) AUS kurz nach Strom AUS */ DigOutOff(onSwitch); DigOutDelayedOnDelayedOff(dirSwitch, SHADE_DELAY_DIFF, SHADE_DELAY + SHADE_DELAY_DIFF * 2); DigOutDelayedOnDelayedOff(onSwitch, SHADE_DELAY_DIFF * 2, SHADE_DELAY); break; case eDigOutShadeClose: /* 1, Strom (on) AUS */ /* 2. Richtung (dir) AUS mit Verzögerung falls vorher EIN) */ /* 3. Strom (on) EIN mit Verzögerung kurz nach Richtung AUS */ /* 4. Warten (30 s) */ /* 5. Strom (on) AUS */ DigOutOff(onSwitch); if (DigOutState(dirSwitch) == TRUE) { DigOutDelayedOff(dirSwitch, SHADE_DELAY_DIFF); } DigOutDelayedOnDelayedOff(onSwitch, SHADE_DELAY_DIFF * 2, SHADE_DELAY); break; case eDigOutShadeStop: /* 1. Strom (on) AUS */ /* 2. Richtung (dir) AUS mit Verzögerung falls vorher EIN */ /* Ausschaltverzögerung deaktivieren und sofort abschalten */ DigOutOff(onSwitch); sState[onSwitch].state = eDigOutNoDelay; /* dirSwitch verzögert abschalten */ if (DigOutState(dirSwitch) == TRUE) { DigOutDelayedOff(dirSwitch, SHADE_DELAY_DIFF); } break; default: break; } }
/*----------------------------------------------------------------------------- * trigger output pulse */ void DigOutTrigger(TDigOutNumber number) { DigOutDelayedOff(number, 1000); }