Contador de tiempo se vuelve negativo

Si estas trabajando con millis deberias usar variables del tipo unsigned long en tu código, que en tu código estan definidas como int y hacen cosas raras cuando restas.

int tiempo1, tiempo2, duracion_actual0, duracion_total0, duracion_acumulada0, numpulsos0;