Résolution du défi 2 par Nicolas
4 variables :
première boucle : while(Y != NbreAllerRetour)
Cette boucle sert à faire tourner tout le programme en boucle tant que le nombre d'aller retour que le robot doit réaliser n'est pas égale au nombre d'aller retour que le robot devait faire (variable NbreAllerRetour).
seconde boucle : while(X != Z)
Cette boucle fera avancer le robot tant qu'il n'aura pas passé autant de lignes qu'il le doit.
En effet Z est égal au nombre de lignes que le robot doit parcourir dans ce trajet et X le nombre de ligne qu'il a déjà passé.
Chaque fois que le robot passera sur une ligne noire il ajoutera 1 à la valeur de X et continuera à avancer si X est différent de Z. Si X est égale à Z le programme sort de la boucle.
troisième boucle qui est parcourue lorsque l’on sort de la seconde : while(SensorValue(Couleur) != 5)
Littéralement tant que la valeur du capteur "couleur" est différente de 5 je...
Cette boucle sert a faire reculer le robot jusqu'à ce qu'il passe sur une ligne/zone rouge.
Ensuite je change les valeurs de mes variables, car le robot a réalisé un trajet.
Je remet X à 0 (X est le nombre de lignes déjà parcourues ... dans le trajet qui va commencer)
J'ajoute 1 à Y (Y est le nombre de trajet parcouru, Le robot vient d'en terminer un: il est logique d'ajouter 1 à Y)
J'ajoute 1 à Z (Z est le nombre lignes noires à parcourir, A chaque trajet le robot doit aller 1 ligne noire plus loin)
- X qui sert a compter le nombre de lignes que le robot a PARCOURU DANS CE TRAJET-CI.
- Y qui sert a compter le nombre de trajets que le robot a DÉJÀ réalisé.
- Z qui sert a compter le nombre de lignes que le robot DOIT PARCOURIR dans ce trajet-ci.
- NbreAllerRetour qui sert juste à indiquer combien d'aller-retour le robot devra faire dans le programme
première boucle : while(Y != NbreAllerRetour)
Cette boucle sert à faire tourner tout le programme en boucle tant que le nombre d'aller retour que le robot doit réaliser n'est pas égale au nombre d'aller retour que le robot devait faire (variable NbreAllerRetour).
seconde boucle : while(X != Z)
Cette boucle fera avancer le robot tant qu'il n'aura pas passé autant de lignes qu'il le doit.
En effet Z est égal au nombre de lignes que le robot doit parcourir dans ce trajet et X le nombre de ligne qu'il a déjà passé.
Chaque fois que le robot passera sur une ligne noire il ajoutera 1 à la valeur de X et continuera à avancer si X est différent de Z. Si X est égale à Z le programme sort de la boucle.
troisième boucle qui est parcourue lorsque l’on sort de la seconde : while(SensorValue(Couleur) != 5)
Littéralement tant que la valeur du capteur "couleur" est différente de 5 je...
Cette boucle sert a faire reculer le robot jusqu'à ce qu'il passe sur une ligne/zone rouge.
Ensuite je change les valeurs de mes variables, car le robot a réalisé un trajet.
Je remet X à 0 (X est le nombre de lignes déjà parcourues ... dans le trajet qui va commencer)
J'ajoute 1 à Y (Y est le nombre de trajet parcouru, Le robot vient d'en terminer un: il est logique d'ajouter 1 à Y)
J'ajoute 1 à Z (Z est le nombre lignes noires à parcourir, A chaque trajet le robot doit aller 1 ligne noire plus loin)
Le programme |
#pragma config(Sensor, S3, Couleur, sensorCOLORFULL)
#pragma config(Motor, motorB, MoteurD, tmotorNXT, PIDControl, encoder) #pragma config(Motor, motorC, MoteurG, tmotorNXT, PIDControl, encoder) // Blanc = 6 Rouge = 5 Noir = 1 task main() { int X; X=0; //X= nbre de lignes passees dans ce trajet int Y; Y=0; //Y= nbre de trajets deja realise int Z; Z=1; //Z= nbre de lignes a passer dans ce trajet int nbreAllerRetour; nbreAllerRetour=4; while(Y != nbreAllerRetour) { nxtDisplayTextLine(1,"Couleur:%f",SensorValue(Couleur)); nxtDisplayTextLine(2,"X:%f",X); //affichage de la valeur de X nxtDisplayTextLine(3,"Y:%f",Y); //affichage de la valeur de Y nxtDisplayTextLine(4,"Z:%f",Z); //affichage de la valeur de Z while(X != Z) { motor[motorB] = 60; motor[motorC] = 60; if (SensorValue(Couleur)== 1)//1= noir { wait1Msec(200); X=X+1; // nbre de lignes passees dans le trajet +1 } } while(SensorValue(Couleur)!=5) // 5= rouge { motor[motorB] = -60; motor[motorC] = -60; } X=0; Y=Y+1; Z=Z+1; } } |
Les difficultés |
1- Le capteur doit être assez bas, s'il est trop haut il risque de capter du rouge là ou il n'y en a pas (sur le bord d'une ligne noire).
2- Il est impératif d'ajouter un délai après avoir détecté une ligne noire sinon le robot détecte plusieurs fois la même ligne noire et croit s'être déjà déplacé jusqu’à la suivante. |