Exemple #1
0
/*-----------------------------------------------------------------------------
*  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;
   }
}
Exemple #2
0
/*-----------------------------------------------------------------------------
*  trigger output pulse
*/
void DigOutTrigger(TDigOutNumber number) {
   DigOutDelayedOff(number, 1000);
}