Mesurer la durée d'une impulsion

En fait, on lance le moteur en appuyant sur un bouton et on le coupe en rappuyant sur ce même bouton.

Puisque tu parles de sécurité, c'est beaucoup plus sûr d'avoir un bouton spécifique pour l'arrêt.

Pour ton problème de surintensité, il faut échantillonner le temps lorsque ta surintensité est détectée

debutImax = millis()

et ensuite si la surintensité se poursuit vérifier si le temps actuel est supérieur à debutImax + TEMPS_MAX_ADMISSIBLE.

if (debutImax + TEMPS_MAX_ADMISSIBLE > millis){
   couper le moteur
}

Tout cela est à placer judicieusement dans ta boucle principale en veillant a y passer suffisamment souvent pour ne pas risquer de cramer ton moteur.
Il faut bien vérifier ton code pour t'assurer qu'il n'y a pas de fonctions bloquantes qui risqueraient de ruiner tes sécurités.