 // used when at the open limit
 #define STATE_ERROR 3   
 // if both switches are triggered -- motor cannot move
+#define STATE_FORCEOPEN 9
+// used to keep the cover open as often as possible
 // fault codes
 #define FAULT_NONE 0
 #define FAULT_MOTOR_SHORT 1

    }
  }
  else {
    if (state != requeststate) { 
      // try to change state
      if (requeststate == STATE_CLOSED) {
        fault = move_to_limit(DIRECTION_CLOSE, &duration);
        if (fault == FAULT_MOTOR_SHORT) 
          Serial.print("Cover attempted to close but failed to reach limit in ");
        else
          Serial.print("Cover closed successfully in ");
      }
      else {
        fault = move_to_limit(DIRECTION_OPEN, &duration);    
        if (fault == FAULT_MOTOR_SHORT) 
          Serial.print("Cover attempted to open but failed to reach limit in ");
        else
          Serial.print("Cover opened successfully in ");
      }
      Serial.print(duration);
      Serial.println(" seconds");
    }
  }
  delay(2000); // 10Hz rep of main loop
}

void report_state() {

#define DPIN_LIMIT_OPENED 11   
// input from limit switch

// Rain 
#define DPIN_RAIN 12           
// input from rain sensor (digital)

// Global variables

