Shared Memory données bizarres
Publié : dim. mai 24, 2015 4:07 am
Bonjour à tous !
J'ai entrepris il y a quelque temps la construction de mon cockpit. J'avance à mon rythme en suivant avec assiduité les posts de certains que j'appellerai les "Maitres" !
Aujourd’hui, je viens vers vous, pour un petit souci. Peut être certains ont déjà rencontré et résolu ce problème.
Voila en ce moment je m'attaque aux jauges, ayant déjà bien avancé sur le reste. J'ai commencé par la Jauge des RPM.
J'utilise un servomoteur avec une carte Arduino Mega. J'ai récupéré un petit bout de code que j'ai bien modifié via visual Studio (je sais, c'est pas top mais j'ai des galères avec éclipse ) pour récupérer les données dans la mémoire partagée BMS.
Le programme fonctionne correctement et il récupère les données, l'envoie bien à la carte arduino, qui transforme tout ça sur ma jolie jauge en carton !
Mais voila, bizarrement, les RPM que la mémoire partagé me renvois ont par moment des valeurs erronées. Par exemple en pleine augmentation du régime moteur, certaines fois je passe de 60 à 20 rpm puis tout de suite après je reviens sur 60. Cela dure une fraction de seconde, mais suffisamment longtemps pour qu'entre temps mon servomoteur bascule à la valeur indiquée !
Bref, j'ai fais une petite vidéo explicative pour ceux qui seraient tentés. (Désolé elle est filmée a l'envers, avec un portable, et c'est le bordel sur le bureau ! )
[BBvideo 800,600][/BBvideo]
On vois clairement le problème à 27 sec et aussi à partir de 1:10 sec...
Je précise que j'affiche l'angle correspondant aux RPM sur l'écran OLED pour suivre la rotation de mon aiguille et comparer les valeurs.
On vois clairement sur l'écran OLED que l'angle change brutalement par moment en augmentant ou en diminuant ! En vérifiant de plus prêt je me rends compte que c'est la mémoire partagée qui me renvoie ces infos bizarres.
Donc ma question est la suivante : Est-ce qu'il faut que je lisse les infos (dans un fonction qui compare les données par exemple) ? faut t-il ajouter du buffering sur la mémoire partagée ?
Bref, je galère et en dehors de ça, le système est presque fonctionnel !
Dans tous les cas, merci d'avoir lu jusque là.
Si certains d'entre-vous ont des idées, je suis preneur !
A bientôt !
J'ai entrepris il y a quelque temps la construction de mon cockpit. J'avance à mon rythme en suivant avec assiduité les posts de certains que j'appellerai les "Maitres" !
Aujourd’hui, je viens vers vous, pour un petit souci. Peut être certains ont déjà rencontré et résolu ce problème.
Voila en ce moment je m'attaque aux jauges, ayant déjà bien avancé sur le reste. J'ai commencé par la Jauge des RPM.
J'utilise un servomoteur avec une carte Arduino Mega. J'ai récupéré un petit bout de code que j'ai bien modifié via visual Studio (je sais, c'est pas top mais j'ai des galères avec éclipse ) pour récupérer les données dans la mémoire partagée BMS.
Le programme fonctionne correctement et il récupère les données, l'envoie bien à la carte arduino, qui transforme tout ça sur ma jolie jauge en carton !
Mais voila, bizarrement, les RPM que la mémoire partagé me renvois ont par moment des valeurs erronées. Par exemple en pleine augmentation du régime moteur, certaines fois je passe de 60 à 20 rpm puis tout de suite après je reviens sur 60. Cela dure une fraction de seconde, mais suffisamment longtemps pour qu'entre temps mon servomoteur bascule à la valeur indiquée !
Bref, j'ai fais une petite vidéo explicative pour ceux qui seraient tentés. (Désolé elle est filmée a l'envers, avec un portable, et c'est le bordel sur le bureau ! )
[BBvideo 800,600][/BBvideo]
On vois clairement le problème à 27 sec et aussi à partir de 1:10 sec...
Je précise que j'affiche l'angle correspondant aux RPM sur l'écran OLED pour suivre la rotation de mon aiguille et comparer les valeurs.
On vois clairement sur l'écran OLED que l'angle change brutalement par moment en augmentant ou en diminuant ! En vérifiant de plus prêt je me rends compte que c'est la mémoire partagée qui me renvoie ces infos bizarres.
Donc ma question est la suivante : Est-ce qu'il faut que je lisse les infos (dans un fonction qui compare les données par exemple) ? faut t-il ajouter du buffering sur la mémoire partagée ?
Bref, je galère et en dehors de ça, le système est presque fonctionnel !
Dans tous les cas, merci d'avoir lu jusque là.
Si certains d'entre-vous ont des idées, je suis preneur !
A bientôt !