Aller au contenu


Photo

Comment sortir de cette boucle ??


  • Veuillez vous connecter pour répondre
77 réponses à ce sujet

#1 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 13 février 2018 - 06:22

Bonsoir,

voici mon code, qui dit bonjour quand on passe devant le capteur en rentrant dans une pièce, et qui dit au revoir quand on passe devant le capteur en sortant de la piece.

Si en rentrant dans la piece  ou en sortant je reste devant le capteur; toutes les 5 secondes ça repete soit HELLO soit goodbye.

Le programme commence toujours par dire la premiere fois hello

Mon souci étant que a cause de mon bloc attendre 5 secondes, si je rentre et que je ressort de la pieces avant que les 5 secondes soient écoulée, ça ne va pas détécter le passage, puisque le bloc attendre 5 secondes sera en train de s'executer.

Du coup je cherche un moyen pour interrompre la boucle IN ou la boucle OUT, si un passage devant le capteur ess effectué pendant que le bloc 5 secondes est en train de s'executer.

Est-ce que quelqu'un aurait une idée, une suggestion ????

Vous pouvez essayer de reproduire le code chez vous pour mieux comprendre le fonctionnement du code.

PS: les 3 blocs "Mon bloc" ne sont pas necessaires, ce sont uniquement des blocs pour afficher du texte

hellogoodbye.jpg



#2 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 13 février 2018 - 07:41

Tu ne devrais pas utiliser une temporisation pour savoir quand passer d'une boucle à l'autre. Plutôt que d'attendre 5 secondes, tu devrais entrer dans une boucle qui vérifie l'état du capteur, et n'en sortir que lorsque le capteur ne capte plus rien. Comme ça, plus de souci si tu restes 1h30 devant le capteur, et pas de souci non plus si tu sors et que tu rentres en moins de 5 secondes ("ah zut, j'ai laissé mes clés à l'interieur !").



#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 février 2018 - 07:44

Tu veux que ça te dise bonjour à chaque fois que tu passe devant et que ça répète si tu restes 5 secondes devant ? 
Si c'est bien ça dans ce cas il te faut donc deux conditions de sorties !  

Tu initialise un "temps de détection" et une variable " 1 personne est détectée "  qui reste à 1 tant que la personne est détectée et qui repasse à 0 quand la personne s'en va.

Exemple ici en pseudo code avec une fonction d'attente réalisée par un while qui permet d'attendre entre deux print dans un do while =) 

 

while(1 )

{

 if ( 1personne est detectée )
 do {
      print "bonjour"
      while( (personne détectée)&(temps de détection < temps max )  { temps de détection ++ // attente  }
  } while ( personne détectée ) 

}

     

à toi de jouer maintenant ! =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#4 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 13 février 2018 - 07:56

Tu ne devrais pas utiliser une temporisation pour savoir quand passer d'une boucle à l'autre. Plutôt que d'attendre 5 secondes, tu devrais entrer dans une boucle qui vérifie l'état du capteur, et n'en sortir que lorsque le capteur ne capte plus rien. Comme ça, plus de souci si tu restes 1h30 devant le capteur, et pas de souci non plus si tu sors et que tu rentres en moins de 5 secondes ("ah zut, j'ai laissé mes clés à l'interieur !").

La temporisation de 5 secondes en fait me sert uniquement pour pas que ça dise hello sans arret si l'on reste devant le capteur mais que ça le dise uniquement toutes les 5 secondes.

Il n'est pas possible me semblet-il en "langage" EV3-G de donner comme condition de sortie de boucle sur le capteur a ultrason, un état "je ne capte rien"
En fait, c'est un peu ce que j'ai fait me semble-t-il.
Si la distance est superieure a 30cm c'est que je ne suis plus devant le capteur donc je sort de la boucle

En fait ce que je veux faire c'est pouvoir rentrer dans la boucle du bas par exemple a n'importe quel moment en interrompant la boucle du haut.

Exemple: je rentre dans la pièce, je m'attarde devant le capteur 20 secondes, dans ce cas il va me dire Hello 4 fois 
Par contre si je rentre dans la piece, il me dit bonjour, et la, je ressort de suite de la piece parceque j'ai de suite trouvé mes clefs, il ne va pas me dire au revoir parceque, il sera toujours dans la boucle du haut en train d'executer le bloc "pause 5 secondes"

Le même phénomène se produit en sens inverse si je sort et que je rentre a nouveau de suite dans la piece

A n'importe quel moment meme si je rentre et sort de suite de la piece, il devrait me dire hello et goodbye, même si je mets 2 secondes pour rentrer et sortir.

Malheureuseument, le bloc pause de 5 secondes qui me sert uniquement pour pas qu'il repete continuellement Hello, m'empeche de sortir soit de la boucle du haut soit de celle du bas



#5 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 13 février 2018 - 07:58

Mike118, 

je prends un peu de temps avant de te repondre, je suis en train d'etudier le pseudocode que tu m'as mis :)



#6 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 13 février 2018 - 08:10

La temporisation de 5 secondes en fait me sert uniquement pour pas que ça dise hello sans arret si l'on reste devant le capteur mais que ça le dise uniquement toutes les 5 secondes.

Il n'est pas possible me semblet-il en "langage" EV3-G de donner comme condition de sortie de boucle sur le capteur a ultrason, un état "je ne capte rien"
En fait, c'est un peu ce que j'ai fait me semble-t-il.
Si la distance est superieure a 30cm c'est que je ne suis plus devant le capteur donc je sort de la boucle

En fait ce que je veux faire c'est pouvoir rentrer dans la boucle du bas par exemple a n'importe quel moment en interrompant la boucle du haut.

Exemple: je rentre dans la pièce, je m'attarde devant le capteur 20 secondes, dans ce cas il va me dire Hello 4 fois 
Par contre si je rentre dans la piece, il me dit bonjour, et la, je ressort de suite de la piece parceque j'ai de suite trouvé mes clefs, il ne va pas me dire au revoir parceque, il sera toujours dans la boucle du haut en train d'executer le bloc "pause 5 secondes"

Le même phénomène se produit en sens inverse si je sort et que je rentre a nouveau de suite dans la piece

A n'importe quel moment meme si je rentre et sort de suite de la piece, il devrait me dire hello et goodbye, même si je mets 2 secondes pour rentrer et sortir.

Malheureuseument, le bloc pause de 5 secondes qui me sert uniquement pour pas qu'il repete continuellement Hello, m'empeche de sortir soit de la boucle du haut soit de celle du bas

 

J'ai du mal m'exprimer, ce que je voulais dire, en pseudo-code pour la branche du haut (celle qui contient la boucle IN) :

SI la distance < 30 cm
    Jouer le son "hello"
    // Si tu ne peux pas utiliser la valeur du capteur comme condition pour une boucle, tu peux faire ça
    Variable valeur = 0
    TANT QUE valeur < 30
        valeur = distance du capteur
    FIN TANT QUE
    BLOC ROUGE (je ne connais pas son nom)
    BLOC AFFICHAGE
FIN SI

Et ce sera la même chose pour la branche du bas. Cette solution règle le problème d'une entrée et sortie rapide, et fait en sorte que le programme ne répète pas 42 fois "hello" toutes les 5 secondes si tu restes longtemps devant le capteur.



#7 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 14 février 2018 - 03:46

et bien , malgré votre aide, je n'arrive toujours pas a faire ce que je souaite avec les blocs de programmation LEGO Mindstorm  :dash2:



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 14 février 2018 - 04:01

et bien , malgré votre aide, je n'arrive toujours pas a faire ce que je souaite avec les blocs de programmation LEGO Mindstorm  :dash2:

 

Il va falloir développer un peu plus x)

 

Est ce que tu as compris mon pseudo code ? 
Est ce ce que tu as compris convient à ce que tu souhaites faire? 
Quelle est la partie du pseudo code que tu n'arrives pas à traduire en Mindstorm ?


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#9 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 14 février 2018 - 04:06

 

Il va falloir développer un peu plus x)

 

Est ce que tu as compris mon pseudo code ? 
Est ce ce que tu as compris convient à ce que tu souhaites faire? 
Quelle est la partie du pseudo code que tu n'arrives pas à traduire en Mindstorm ?

behn en fait, je n'arrive pas a lui dire de repeter bonjour toute les 5 secondes sans me retrouver dans une boucle de laquelle je ne peux pas sortir, sans devoir attendre l'ecoulement des 5 secondes.

Je ne comprends pas trop non plus comment définir: temps de détection < temps max, puisque dans ce cas aussi je me retrouve dans une boucle de laquelle je ne peux pas sortir des que je m'éloigne du capteur.

Apparament il doit y avoir un raisonnement qui m'échappe parceque depuis hier j'ai du faire au moins 5 codes completement different même en utilisant l'opérateur logique ET, mais la ou sa bloque c'est toujours cette histoire des 5 secondes



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 14 février 2018 - 04:41

Ok sais tu faire attendre 0,5 secondes ? =) 

Dans ce cas je te propose cette variante :

 

while(1 )

{

 verification de présence de personne // et mise à jour de personne détectée si besoin;

 if ( 1personne est detectée )
 do {
      print "bonjour"
      while( (personne détectée)&(temps de détection < 5 secondes ) 
      {
        attendre 0,5 s;
        temps de détection += 0.5 ; // attente 
        verification de présence de personne //et mise à jour de personne détectée si besoin;
      }
  } while ( personne détectée ) 

}

 

à toi de jouer maintenant =) ( grosso modo c'est ce que je t'avais exposé en un peu plus détaillé =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#11 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 14 février 2018 - 07:47

eh bien non, je suis de plus en plus perdu là,

j'en suis là, mais je n'ai aucune idée si j'ai réussi a suivre ton pseudocode correctement ou pas


hello.jpg



#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 14 février 2018 - 08:31

Je ne connais pas les briques mindstorm. 

Que fait actuellement le programme que tu as codé ? 
peux tu décrire les différentes étapes ? 


Peux tu de la même façon décrire ce que tu souhaites faire ? 

 

le pseudo code que je propose expliqué en texte : 
 

Les variables dont on a besoin sont : 
un booléen qui désigne le présence d'une personne 1 si une personne est présente 0 sinon. 
un int qui traduit le décompte des 5 secondes de temps pendant lequelle une personne a été détectée. 

 

ces deux variables sont initialisées à 0. 

début du programme on lance une boucle 0, infinie ( while (1) )  
     On commence par vérifier si une personne est présente et on met à jour le booléen, ( il est donc nécessaire d'avoir une fonction qui fait ça ) 
     Si le booléen est à 1 { 

          on affiche une première fois " bonjour "

          on commence une boucle 1 qui s'exécute tant qu'une personne est présente // elle attend 5 secondes avant d'afficher bonjour

               on commence une boucle 2 , qui s'execute tant qu'une personne est détectée et que le temps est inférieur à 5s
                    on attend 1s 
                    on ajoute 1 au int du temps de détection, 
                    on vérifie si une personne est présente et on met à jour le booléen
               fin de la boucle 2
           on remet le temps à 0.
           si non booléen on affiche au revoir  la personne est repartie 

         fin de la boucle 1
      }

   fin de la boucle 0 

fin du programme ...

 

 

Hésite pas à mettre une image de brique, expliquer ce qu'elle fait et en mettre une autre, 

je pourrais alors manipuler les images de brique pour peut être te faciliter la compréhension. 

Je ne pense pas que ton problème soit bien compliqué =) Le plus dur est sans doute de comprendre le problème et de le communiquer =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#13 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 3 580 messages
  • Gender:Male

Posté 15 février 2018 - 10:39

Je n'ai pas tout suivi ce que vous avez écrit. Cela me donne la migraine... :ignat_02: 
J'ai mis un petit moment à trouver cette solution.
J'ai utilisé un bouton poussoir pour plus de simplicité.

Hello-Goodbye.png


Ma chaine vidéo YouTube : https://www.youtube....wMz-IzZqyvqEUek

#14 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 février 2018 - 10:54

@ Oracid : Je pense que ce que tu as fais traduit ce que j'ai écrit =) 

J'ai quand même du mal à me faire à ces briques ^^ Mais je comprends très bien que certains préfère les briques =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#15 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 15 février 2018 - 11:07

@ Oracid : Je pense que ce que tu as fais traduit ce que j'ai écrit =) 
J'ai quand même du mal à me faire à ces briques ^^ Mais je comprends très bien que certains préfère les briques =)

Pour tout te dire je ne suis même pas sur d'avoir correctement traduit, je commence à être totalement perdu pour tout te dire
J'ai encore refait un nouveau code totalement différent hier soir

Les briques ça me semble plus ludique et plus évident parfois
Même si avec ce code Hello Goodbye, je ne serai plus aussi catégorique tellement ça me prends la tête
Tu programme avec quoi ton Mindstorm ?

Dommage qu'il n'existe pas un logiciel qui permette d'écrire en langage textuel et qui ensuite converti le tout en briques



#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 février 2018 - 11:19

Perso je ne programme pas de Mindstorm. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#17 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 15 février 2018 - 11:25

Ah d'accord
J'espère quand même que je vais arriver à m'en sortir en essayant de suivre tes conseils
Je trouve parfois très difficile d'arriver à traduire un pseudo code en briques

#18 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 3 580 messages
  • Gender:Male

Posté 15 février 2018 - 11:46

Le langage EV3-G, c'est du C ! Ou tout comme.

Pseudo-code :

in-out = 0 (in=1, out=0)

boucle
...si appui sur bouton
......si out, alors "Hello", in-out = in
......si in, alors "Goodbye", in-out = out
fin boucle
Ma chaine vidéo YouTube : https://www.youtube....wMz-IzZqyvqEUek

#19 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 15 février 2018 - 04:05

Oracid,

je n'ai pas encore testé le programme que tu as mi, je vais le faire tout à l'heure, mais il me semble en regardant le code que quand on utilise la condition avec le bouton poussoir (comme tu l'as fait), ça ne repete hello ou goodbye qu'une fois, puisque en appuye et ensuite on relache.

Si on remplace la condition bouton poissoir par une condition "mesure de distance", il va par contre répéter sans arret hello hello hello hello tant que cette mesure est inférieure ou égale au seuil donné (dans mon cas 30cm)
Je testerais cela tout à l'heire pour être sûr que ce que j'avance est exact

PS: je ne pensais pas que le langage EV3-G etait comme du C, du coup on doit pouvoir faire beaucoup plus de chose en EV3-G que ce que je pensais :)

Petit scèma explicatif (fait avec le super logiciel PAINT  :P ) de ce que c'est censé faire ci-dessous:

explication.jpg



#20 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 105 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 février 2018 - 05:37

Par contre avec ton image je comprend qu'il faut détecter si on entre ou si on sort... Comment détectes tu que la personne est en train de rentrer ou de sortir ? 
Moi dans ce que je t'ai proposé, tant qu'on est devant le capteur ça indique que la personne est dedans, ... 
En gros je n'ai jamais le cas où ça boucle sur good bye ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users