Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Comment empêcher l’exécution de la dernière itération d'une boucle while ?

Bonjour,

Je suis actuellement en train de coder dans LabVIEW un tâche comportementale et je rencontre un problème avec une boucle while dont je souhaiterais empêcher l’exécution de la dernière itération. 

Il s'agit d'une tâche de "foraging" : le participant de l’expérience contrôle une croix avec la souris et il doit entrer dans un des deux cercles affichés à l’écran. Lorsqu'il entre dans un des cercles, il obtient des récompenses (trigger). Une première boucle While (boucle A dans l'image ci-jointe) détecte la présence du curseur dans le cercle. Une seconde boucle While (boucle B dans l'image ci-jointe) gère la délivrance de récompenses à une certaine fréquence grâce à une fonction délai qui incorpore une 3eme boucle While (boucle C dans l'image ci-jointe) et ce en parallèle du code qui vérifie que le curseur est toujours dans le cercle. Bien que la condition de sortie des 3 boucles While soit la sortie du curseur du cercle (booléen NotInPatch = True), la boucle B exécute une dernière itération au terme de ce délai. Or comme le délai s’incrémente de 200 ms après chaque itération de la boucle B, il atteint vite des valeurs qui empêchent le participant de commencer à exploiter un autre cercle tant que ce délai n'est pas passé. 

Je souhaiterais donc savoir comment empêcher la boucle While B d’exécuter cette dernière itération lorsque le participant est sorti du cercle.

Je vous remercie par avance pour votre aide.

Cordialement,

DT

0 Compliments
Message 1 sur 4
1 122 Visites

Bonjour,

 

Je ne saurais répondre à ta question cependant si j'ai bien compris ce que tu veux faire, j'aurais programmé la chose différemment.

J'aurais utilisé une structure événement, elle même mise dans une boucle While et ensuite je crée mes différents événements dont j'ai besoin.

 

Dans les options d’événement disponible tu en as 2 qui pourrait d’intéresser, il s'agit des événements "entrée de souris" et "sortie de souris". Tu crée ces 2 événements sur les deux cercles que tu as besoin et ça donne:

 

- Si la croix entre dans la zone du cercle A (un simple bouton vrai/faux ou un indicateur et tu lui donne l'apparence que tu veux en le personnalisant) l'événement "entrée souris" se déclenche et exécute le code qui correspond (attribution de récompense il me semble dans ton cas). Ensuite, lorsque la croix sort du cercle A, c'est l'événement "sortie souris" qui va se déclencher et exécuter le code contenu dans l'événement "sortie souris".

-Même chose pour la zone de ton cercle B.

 

Tu as un exemple dans l'aide de Labview qui illustre bien ce que j’essaie de te montrer tape "structure événement" dans la recherche d'exemple et choisi l'exemple "Gestion des événements de souris"

 

Je ne sais pas si cette autre méthode de programmation pourrait te convenir et résoudre ton problème, à voir 😉

 

@+

0 Compliments
Message 2 sur 4
1 111 Visites

Bonjour,

Merci d'avoir pris le temps de répondre et de proposer une solution à mon problème. Je n'ai pas d’expérience avec les structures événement mais ce sera l'occasion d'apprendre 🙂 en essayant cette méthode.

Encore merci.

Bien cordialement,

DT

0 Compliments
Message 3 sur 4
1 097 Visites

 

Un simple Case (en bleu) branché à la même condition d'arrêt que ta boucle fera l'affaire.

 

Walker34_0-1657195253061.png

 

Et oui, dans labview il n'y a pas de DoWhile() et While()..do comme en C++..

0 Compliments
Message 4 sur 4
1 047 Visites