Excuse moi, j'ai pas tout compris..... 14ms???
720 points par seconde
donc 10 points en 13,89 ms ...
là je dois t'avouer que je ne sais pas trop comment faire mieux.
avec un codeur incrémental et une carte de comptage plutôt qu'un codeur absolu
le codeur incrémental te donne 2 signaux en quadrature, ce qui te permet d'interpréter le sens de rotation ainsi que de compter les incréments
avec ton codeur absolu, comment fais tu pour compter les tours (proprement) ?
tu dois détecter la transition de 719 vers 0 (donc nouvelle valeur < ancienne valeur)
mais dans ce cas, imaginons que le codeur tourne dans l'autre sens (donc aussi nouvelle valeur < ancienne valeur) ...
donc du coup, tu vas vouloir détecter un grand écart (du genre (nouvelle valeur + 360) < ancienne valeur) mais ça ne sera jamais parfait
tu aurais ton codeur incrémental (moins cher qu'un absolu) + carte de comptage (en extra vs l'autre solution) mais niveau code, tu as juste à configurer un modulo (taille du coffret) et faire une soustraction (pour caler le zéro) = bcp moins de temps à cogiter, programmer ...
C'est ce que je fais, mais je ne travaille pas avec des valeurs négative, c'est pourquoi j'ai fais de cette façon.
qui parle de valeur négative ?
tu fais une soustraction que tu ramènes ensuite sur la plage (arithmétique en modulo)
valeur décalée = (valeur codeur - offset zéro + 720) % 720 (le + 720 est pour rester dans les positifs, mais on peut voir également "offset zéro" comme une addition plutot qu'une soustraction, question de point de vue)
ceci dit, il faut raisonner sur une côte du coffret et pas sur le codeur
en résumé :
* transformer valeur codeur (modulo 720) en côte coffret (modulo 720 * 2), donc il faut compter les tours (détecter le grand écart puis côte coffret = nbr de tour * 720 + valeur codeur ; le compteur tour n'a pas besoin d'être borné puisque tu fais un modulo juste après pour le décalage zéro)
* appliquer le décalage zéro sur la côte coffret (valeur décalée = (cote coffret + offset zéro) % 1440)
* détecter ta fenêtre pour déclenchement prise de photo (pos mini <= valeur décalée < pos maxi pour lancer la photo) --> on peut même simplifier encore plus si on fait correspondre ton offset zéro avec la fenêtre de détection (donc ton réglage zéro correspondrait au point de déclenchement de la photo)
et ça doit être normalement bcp plus court que ce que tu as posté au dessous (je rappelle que je n'ai pas tout étudié en détails, juste une appréciation sur le volume de code ...)
@+