   }
 }
 
+void funcaoComLiberacao(const byte saida, String nome, unsigned long inicio, unsigned long fim, byte liberacao){
+  inicio += inicio_ciclo;
+  fim += inicio_ciclo;
+  if (desligado(saida) && liberacao){
+    if (tempo_atual >= inicio && tempo_atual < fim) {
+      ligaFuncao(saida, nome);
+    }
+  } else if (tempo_atual >= fim) {
+    desligaFuncao(saida, nome);
+  }
+}
+
 void liberaFotocelula() {
   unsigned long inicio = ti_fotocelula + inicio_ciclo;
   unsigned long fim = tf_fotocelula + inicio_ciclo;

void desligaFuncao(byte saida, String nome) {
  if (ligado(saida)) {
    desliga(saida);
    escreveSerial("<< " + nome + " Desligado." + (String)tf_mandibula);
  }
}


  if (desligado(saida)) {
    liga(saida);
    if (ligado(saida)){
      escreveSerial(">> " + nome + " Ligado.");
    } else {
      escreveSerial("Ocorreu um erro ao ligar " + nome);
    }
