[..] Structure de variable dur à exploiter!

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

[..] Structure de variable dur à exploiter!

#1

Message par cutprod »

Bonjour a tous,
j'exploite différentes cartes d'interface pc grâce a autoit et la je bloque sur un gyroscope:
les cartes on (en plus des fonctions normales) un mode évènement.
Voici un exemple que je maitrise :
la doc de la dll .com dit :
► Afficher le texte

pour l'exploiter j' insert dans mon script la fonction :
► Afficher le texte
mais la je suis sur une structure en tableau que je ne parviens pas a assimiler donc je n'arrive pas a en sortir des valeurs, la doc dit :
► Afficher le texte
je ne parviens pas a mi retrouver dans le tableau... :oops:
Pour exploiter les trois axe du gyro, il faut en plus appliquer une fonction sur certaines des valeurs contenue dans le tableau!!
j'ai un example en vb :
► Afficher le texte
Que je n'arrive pas a transposer sous Autoit, parce que je ne comprend pas la structure du début...
Je suis pas très sur de mettre bien expliquer, si vous voulez la doc de la carte ou figure toutes les fonctions :
http://www.phidgets.com/documentation/Phidgets/1056.pdf
la carte possède une boussole magnétique un gyroscope 3 axes et un accéléromètre 3 axes, mais pour l'instant je ne m'interresse qu'au gyro.
Ha oui petit détail je parviens a obtenir les valeurs en temps réel des 3 axes (X,Y,Z) mais sans appliquer la fonction de calcule (comme dans l'exemple VB) elles retombes a zero dés que le gyro ne bouge plus:
► Afficher le texte
Voila!! un peu lourd...je sais :?
UN petit coup de main pour exploiter la structure et je suis sur que je me débrouillerais pour le reste...ou pas :mrgreen:
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#2

Message par bloodwolff »

Voila!! un peu lourd...je sais
Oui sa fais un peu peur ! J'espère que quelqu'un t'aidera
Compte skype : bloodwolfff
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#3

Message par moutelous »

Bonsoir,

En fait, je ne comprends pas ce que vous ne comprenez pas ..... "Sans jeu de mots, ni malices" ....

Après avoir compulsé cette fameuse API et le code VB que vous avez joint :

L'Evenement OnSpatialData

event OnSpatialData( data() as PhidgetSpatial_SpatialEventData, dataCount as Long)
Parameters:
data:
An array of sets of spatial data.

dataCount:
The number of spatial data sets in this event.


Va donc permettre de récupérer un ensemble de données sous forme de tableau (ou structure) dont la définition est donné par :

PhidgetSpatial_SpatialEventData
Used for the OnSpatialData event. This structure represents all the state of a PhidgetSpatial at a moment in time.
struct PhidgetSpatial_SpatialEventData
{
double acceleration[3]; ... les 3 axes de l'acceléromètre
double angularRate[3]; ... les 3 axes du Gyro ..... etc ...
double magneticField[3];
long time_seconds;
long time_microseconds;
}


et correspondant à "Data" de l'évènement. "DataCount" quant à lui, va nous permettre, "pas à pas", de calculer l'évolution des grandeurs données dans le tableau.
cutprod a écrit :Ha oui petit détail je parviens a obtenir les valeurs en temps réel des 3 axes (X,Y,Z) mais sans appliquer la fonction de calcule (comme dans l'exemple VB) elles retombes a zero dés que le gyro ne bouge plus
Ceci est en effet "Normal" , ici se sont des vitesses angulaires qui sont mesurées .... quand le gyro ne bouge plus.... les vitesses sont nulles.

Il faut intégrer tout cela ... mais vous devez le savoir.

Si ce n'est déjà fait je vous conseille de regarder le fichier http://www.phidgets.com/documentation/C ... Manual.pdf décrivant l'ensemble des structures, propriétés et fonctions.

Ainsi donc il faut donc dissocier le tableau de données (la structure) renvoyé lors de l'appel séquentiel à l'évènement, de l'ensemble des propriétés et fonctions permettant de l'exploiter et ainsi de faire "vivre" vos 3 capteurs.


Je ne sais si j'ai répondu à vos attentes ... A votre disposition ...
A+
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#4

Message par cutprod »

Bonjour, je vous remercie pour votre réponse et de l'aide que vous m' apportez.
Mon problème est pour lire les infos dans ce fameux tableau!
En mode "event" avec une autre carte qui me renvoi une position , j'ai une variable a structure simple =

OnPositionChange
Fired when the position of a motor changes.
event OnPositionChange(
Index as Long,
Position as Double
)
Parameters:
Index
The motor index.
Position
The motor position.

Je récupère la position du moteur avec cette fonction =

Code : Tout sélectionner

Func phid1_OnPositionChange($Index, $Position_Value)
GUICtrlSetData($Input1, $Position_Value)
EndFunc
Maintenant avec cette variable "OnSpatialData"
je ne parviens pas a trouver la bonne syntaxe pour lire les infos dedans.
je voudrais afficher dans des inputs les valeurs des 3 axes du gyro et le "time", en fait je ne parviens pas a pondre une fonction pour lire n'importe quelle valeur dans le tableau :?
Voila j'espère mettre bien expliquer :?: Et encore merci pour votre aide.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#5

Message par jchd »

struct PhidgetSpatial_SpatialEventData
{
double acceleration[3];
double angularRate[3];
double magneticField[3];
long time_seconds;
long time_microseconds;
}
Correspond à :
$tSpatialEventData = DllStructCreate("double acceleration[3]; double angularRate[3]; double magneticField[3]; long time_seconds; long time_microseconds")

Pour accéder au premier élément du tableau acceleration dans la structure, on fait :
$accel1 = DllStructGetData($tSpatialEventData, "acceleration", 1)

L'aide de DllStructGetData est pourtant d'une grande clarté.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#6

Message par cutprod »

Bonjour, merci pour votre réponse :wink:
Surement d'une grande clarté! Mais je ne m' etais même pas orienté dessus, faute de piste a exploiter....
Je pensais devoir rester avec les "objets" comme d'habitude je communique avec la carte en déclarent :

Code : Tout sélectionner

$oPhidget = ObjCreate("phidget21COM.PhidgetSpatial"); création de l'objet PhidgetAdvancedServo
$oPhidget.Open();ouverture de la carte (avec comme argument le S/N de la carte)
sleep(500);on lui laisse le temps de se connecter
If NOT $oPhidget.IsAttached Then;test de "bonne connection" si négatif exit
    MsgBOx(0, "Error", "La carte Phidget n'est pas connecté!!")
    Exit
Else
EndIf
Exploiter directement la dll ne m' avais pas semblé justifier...
Je vais travailler dans cette direction.
Encore merci a vous. :D
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#7

Message par jchd »

Ah, ce machin offre une interface COM. Alors il faut piocher dans les méthodes de cette interface spécifique pour s'y retrouver. Bon courage et bonne chance !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#8

Message par cutprod »

Aie,Aie,Aie, demie-tour 180° on revient se prendre la tête sur la syntaxe pour communiquer avec l'interface COM :cry:

Si pour une variable de type simple =
► Afficher le texte
Je declare mes events avec au debut du script =

Code : Tout sélectionner

$oPhidEvents = ObjEvent($oPhidget, "phid1_")
Puis dans le script une fonction =

Code : Tout sélectionner

Func phid1_OnPositionChange($Index, $Position_Value)
GUICtrlSetData($Input1, $Position_Value)
EndFunc
Alors pour ma variable en tableau =
► Afficher le texte
Quelle fonction inserer?
J'ai tester pas mal de truc sans succès...

Code : Tout sélectionner

Func phid1_OnSpatialData(
$data[1] ,$dataCount)
GUICtrlSetData($data, $dataCount)
EndFunc
et beaucoup d'autre...
Et aussi c'est pour ça que je mis la fonction VB en exemple parce qu'elle utilise aussi la dll "phidget21COM"
et l'event =
event OnSpatialData(
data() as PhidgetSpatial_SpatialEventData,
dataCount as Long
)
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Structure de variable dur à exploiter!

#9

Message par jchd »

Désolé je n'ai pas vraiment le temps de plonger dans ton interface VB.

Par contre, je vois mal le principe de fonctionnement de ces évènements. Sont-ils en entrée ou en sortie ? Autrement dit, t'apportent-ils de nouvelles données en cas de changement de situation (ce que je pense) ou bien te permettent-ils de changer des données de la carte pilotée ?

Autre chose, je ne comprends pas bien le GUICtrlSetData($data, $dataCount) ?

Dans l'autre cas et pour ta structure à rallonge, ce que tu récupères de l'event COM est ou semble être une structure similaire. Ce qui me fait douter est le paramètre "dataCount as Long", car la structure a une taille fixe bien connue. Néanmoins et partant du principe que c'est bien la structure qu'on t'envoie, tu instancies une structure PhidgetSpatial_SpatialEventData comme on a vu précédemment et tu recopies ta variable d'entrée dedans, afin d'avoir accès aux données qu'elle contient. _MemMoveMemory fait ça très bien, reste à vérifier cette question de taille de bloc de données qui ne me semble pas d'une limpidité irréprochable.

Si, à l'opposé c'est un pointeur sur la structure que l'event COM renvoie, alors il suffit de spécifier cette adreesse en second paramètre de DllStructCreate pour s'en tirer. Vérifier la longueur aussi avant, toutefois.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre