Bonjour, je suis un terminale en spécialité isn et je dois, pour mon projet utiliser le langage C, j'ai pu apprendre les bases du langage. Voici mon projet, j'ai un petit robot (MOWAY) que je dois programmer de sorte qu'il suit une ligne noire, puis s’arrête s'il détecte un obstacle et va attendre 10 secondes pour voir si l'obstacle est toujours présent, dans ce cas il doit faire demi tour et continuer sa route, mais dans le cas où l'obstacle se retire avant les 10 secondes, le robot doit continuer sa route dans ce sens.

j'ai déjà réussi à faire suivre la ligne noire au robot, ainsi que son arrêt lorsqu'il voit un obstacle. Cependant lorsqu'il détecte un obstacle, il s’arrête 10 secondes et fais demi tout même si l'obstacle a été retiré avant les 10 secondes. Je n'arrive vraiment pas à trouver comment résoudre ce problème, Merci de votre aide par avance.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
/* Le code exécutable commence ici */
void main()            // `Debut` (Appelé au RESET)
{
  SEN_CONFIG();
  MOT_CONFIG();
  do                   // `Début d'itération Répéter..`
  {
    if (SEN_LINE_DIG(LINE_L)==1 && SEN_LINE_DIG(LINE_R)==1) // Faire avancer le robot sur la ligne noire
   {
    MOT_STR(50,FWD,TIME,0); 
 
   } 
 
    else if (SEN_LINE_DIG(LINE_R)==0 && SEN_LINE_DIG(LINE_L)==1) :// Faire dévier le robot vers la gauche quand capteurs de ligne droit voit du blanc
 
    {
     MOT_ROT(50,FWD,CENTER,LEFT,ANGLE,10);
 
    }
 
    else if (SEN_LINE_DIG(LINE_R)==1 && SEN_LINE_DIG(LINE_L)==0) // Faire dévier le robot vers la droite quand capteur ligne gauche voit du blanc
 
     {
 
      MOT_ROT(50,FWD,CENTER,RIGHT,ANGLE,10);
 
     }
 
    else if (SEN_OBS_ANALOG(OBS_SIDE_L)>100 || SEN_OBS_ANALOG(OBS_SIDE_R)>100 || SEN_OBS_ANALOG(OBS_CENTER_L)>100 || SEN_OBS_ANALOG(OBS_CENTER_R)>100) // Arreter le robot si obstacle
 
    {
 
     MOT_STOP();
     PAUSE_SECONDE(10);
     MOT_ROT(100,FWD,CENTER,RIGHT,ANGLE,50);
     while (!MOT_END);
 
    }
 
 
 
 
  }  
 
     while(1);
 
}                      // Fin de la fonction "main"
/* Fin du texte */