Aujourd'hui, la lecture du courant se passe effectivement dans la loop principale DCCpp::loop() . Il y a à la fois la lecture de courant sur la voie principale puis sur la voie de programmation, ce qui signifie 100 analogRead par loop(). C'est sans doute trop fréquent, et on pourrait vraisemblablement ne laisser la mesure que chaque dixième de seconde, voire quart de seconde. Mais ça resterait encore trop fréquent et perturberai encore les timings à ces moments là. La lecture de CV est aussi perturbée, mais bien plus rarement, effectivement.
Il y a l'option dans ESP32_Timer pour faire faire la mesure au second core, mais si les choses s'améliorent un peu, ça reste trop perturbant pour les timings. Je pense qu'analogRead touche des choses bas-niveau de l'ESP qui sont communes à tous les coeurs.
Les tests de Michel montrent que la fonction remplaçante fait bien son boulot. Merci Michel ! Il faut maintenant vérifier que les timings DCC sont bons avec la lecture analogique débranchée (UNDEFINED_PIN sur le troisième argument de beginMain() dans Labox.ino...), et si c'est le cas, alors il faudra implémenter la nouvelle lecture analogique partout et revérifier avec le sniffer.