IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Projet terminale en isn, question débutant


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Par défaut Projet terminale en isn, question débutant
    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 */

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pharell1234 Voir le message
    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,
    Ben il me semble que tu ne regardes qu'une fois s'il y a un obstacle. Si tu veux détecter que l'obstacle a été retiré, il te faut rechecker sa présence.

    Ta détection d'obstacle est faite d'après cet algo
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    si obstacle, alors
        arrêter robt
        attendre 10s
        faire demi-tour
    fin si

    Elle devrait être faite selon cet algo
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    si obstacle, alors
        arrêter robot
        attendre 10s
        si obstacle alors faire demi-tour
    fin si

    Accessoirement main() n'est pas void mais int. Et tu aurais avantage à créer des fonctions pour factoriser certains traitements. Un souci toutefois est dans le nombre de caractéristiques de ton robot (les OBS_SIDE_R, OBS_CENTER_L et autres) qu'il faudrait passer aux fonctions mais ça peut se régler si tu les regroupes dans une structure. Dans ce cas tu passes simplement la structure aux fonctions qui peuvent alors accéder aux variables qui la composent par ricochet.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 783
    Par défaut
    Hello,

    J'aurais plutot vu cet algorithme, qui permet au robot de repartir si l'obstacle disparait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    si obstacle
    alors
    	arrêter le robot
    	tant que l'obstacle est présent et que le temps d'attente est < 10 secondes
    		verifier si l'obstacle est toujours là
    	si obstacle
    		le robot fait demi-tour
    	remettre robot en marche

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Plutôt que des wait de partout, ce serait le moment d'introduire un système de machine à état : avance, attente obstacle, ...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Par défaut Créer une variable?
    Bonsoir, Merci pour vos réponses, pour faire "attendre" le robot je pensais à créer une variable... De sorte que par exemple "i"=0 et "i" prend la valeur "i+1" chaque seconde..En fait j'aimerai créer une variable et un code qui permet de faire un décompte.. de 0 à 10 .. Afin de dire au robot que si "i"=10 alors faire demi tour..

    J'espère avoir été assez clair, Merci de m'aider par avance.

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 783
    Par défaut
    Re,-

    J'écrirais quelque chose du genre
    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
    #include <time.h>
    #inlcude <stdbool.h>
     
    #define MAX_WAIT_DELAY		10		// en secondes
     
    bool obstacleIsPresent(void);
     
    if(obstacleIsPresent()) {
    	robotStop();
    	time_t start_time=time(NULL);
    	while(time(NULL)-start_time<MAX_WAIT_DELAY)
    		if(!obstacleIsPresent())
    			break;
    	if(obstacleIsPresent())
    		robotTurn180Degrees();
    	robotStart();
    }

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pharell1234 Voir le message
    Bonsoir, Merci pour vos réponses, pour faire "attendre" le robot je pensais à créer une variable... De sorte que par exemple "i"=0 et "i" prend la valeur "i+1" chaque seconde..En fait j'aimerai créer une variable et un code qui permet de faire un décompte.. de 0 à 10 .. Afin de dire au robot que si "i"=10 alors faire demi tour..
    Et comment fais-tu pour attendre 1s à chaque itération ? sleep() ? Donc si tu peux attendre 1s tu peux tout aussi bien attendre 10.
    Ton truc serait bien si tu voulais faire un décompte, avec par exemple possibilité d'activer le robot pendant ce décompte. Si c'est juste attendre pour attendre alors autant utiliser une fonction qui fait déjà directement ça.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projet Mastermind Terminale S ISN
    Par jojodu30 dans le forum Général Python
    Réponses: 9
    Dernier message: 27/05/2015, 12h28
  2. Réponses: 18
    Dernier message: 04/04/2006, 14h31
  3. question débutant xsl
    Par irnbru dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/03/2006, 18h20
  4. Question débutant ...
    Par Lypertrophie dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 19h00
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo