RobotC

Résolu
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   -  
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je voudrais comprendre un truc que je trouve souvent dans les codes en RobotC, qui est la boucle while(true)...
Je m'explique:
exemple:
while (true){
//du code
}
else{
//du code
}

je me dis que while(true) est une boucle infinie, on rentre dans la boucle et on y ressort plus, car on a toujours true.
Je me trompe ou pas?
merci d'avance!

12 réponses

GenerationRobots Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   2
 
Oui, c'est bien cela et c'est d'ailleurs l'effet recherché. En effet, on évite les boucles infinies en programmation classique par contre, on les recherche en robotique car on veut qu'un comportement, une vérification de variable, une lecteur d'un capteur... se fasse indéfiniment. Mais alors, la question qui vient, c'est comment un robot ne reste-t-il pas bloqué ? La réponse est "Multitâche, parallélisme...". Un robot doit savoir faire plusieurs choses à la fois : lire la valeur de certains capteurs, indiquer aux moteurs combien de tours de roue ils doivent tourner, mettre à jour des variables en mémoire... Il est impensable qu'un robot s'arrête de se déplacer car il est en train de demander à son capteur de distance s'il y a un obstacle devant lui, même si cette lecture est rapide.

Donc en robotique, on se sert massivement du multitâche (ou multithreading qui en est une variante) de sorte qu'une tâche peut tout à fait contenir un while (true). Le code ne s'arrêtera pas de lui même mais c'est le code qui a lancé la tâche (ou le thread) qui va l'arrêter.
2
Bilow Messages postés 1014 Date d'inscription   Statut Membre Dernière intervention   117
 
Et un simple break; peux cesser une boucle infinie.
2
zelos666 Messages postés 181 Date d'inscription   Statut Membre Dernière intervention   12
 
Le "else" ses pour un "if" et non le "while".

pi si tu a un while(true) sa veut dire que tu a du code dans ton while qui finit par le changer en false.
0
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   6
 
Ok, je vois;
Mais sinon, je cherche à faire garder l'équilibre à un gyropode. Tu ne saurais pas comment faire?
Merci pour ta réponse!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zelos666 Messages postés 181 Date d'inscription   Statut Membre Dernière intervention   12
 
Non désolé, ses hors de mes compétence :/
0
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   6
 
Ok, je te remercie quand même :)
0
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   6
 
Merci pour les éclaircissements!
0
GenerationRobots Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonne remarque !
0
juveln Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   15
 
Utiliser un break fonctionne mais c'est un solution un peu agressive... pour sortir de la boucle plus proprement, il suffit de l'instancier à un boolean qui est true au début et lorsque le travail voulu est fini on le met à false....
boolean run = true
while(run){
...
}

Lorsqu'on veut sortir de la boucle on suffira de
run = false
0
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   6
 
En fait, j'utilise pas de break, y a un bouton spécial sur le robot pour arrêter, où on peut le faire directement à partir de l'IDE. Mais merci pour a proposition!
0
Bilow Messages postés 1014 Date d'inscription   Statut Membre Dernière intervention   117
 
Dans ce cas-là, pour fermer, il y a plusieurs possibilités.

Un break;
Le bouton Stop dans l'IDE.
Une variable True / False (mais pas avec while(true) alors)
exit() selon les languages
return 0 s'il y a une fonction int main()
...
0
hdiama Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   6
 
ça résume tout en effet :)
0