 void sensorReset(){
   if (ativo(sensor_reset) && reset_liberado){
     sensor_resetou = VERDADEIRO;
+  }
+}
+
+void cicloMedio(){
+  if (conta_ciclos > 0){
+    ciclo_padrao = soma_ciclos / conta_ciclos;
   }
 }
 

bool reset_falso = FALSO;
unsigned long conta_ciclos = 0;
boolean produzindo = FALSO;
boolean reset_liberado = VERDADEIRO;
boolean sensor_resetou = FALSO;
// Tempos do Ciclo
// Ciclo
unsigned long ciclo_padrao = 1500;
unsigned long ciclo_minimo = 900;
unsigned long ciclo_maximo = 2000;
unsigned long primeiro_ciclo = 0;
// Mandibula
unsigned long inicio_mandibula = 550;
unsigned long fim_mandibula = 1500;

}

void funcaoReset() {
  unsigned long tempo_atual = millis();
  unsigned long fim_ciclo = inicio_ciclo + ciclo_padrao;
  unsigned long minimo = inicio_ciclo + ciclo_minimo;
  unsigned long maximo = inicio_ciclo + ciclo_maximo;
  sensorReset();
  if (sensor_resetou || tempo_atual >= maximo) {
    conta_ciclos++;
    escreveSerial((String)conta_ciclos + ": " +
                    (String)(tempo_atual - inicio_ciclo) + " / R:" +
                    (String)ciclo_padrao);
    soma_ciclos += tempo_atual - inicio_ciclo;
    reiniciaCiclo();
  }
  if (tempo_atual < minimo && reset_liberado){
    reset_liberado = FALSO;
  } else if (tempo_atual > minimo && !reset_liberado){
    reset_liberado = VERDADEIRO;
  }
}

void reiniciaCiclo() {
  inicio_ciclo = millis();
  cicloMedio();
  ciclo_resetado = VERDADEIRO;
  sensor_resetou = FALSO;
  fotocelula_liberada = FALSO;
