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 :

Question sur un pointeur ?


Sujet :

C++

  1. #21
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Pour debugger ton code, je connecterai mon arduino sur un port serie au PC (via l'USB), j'ouvrirai le moniteur série sur l'IDE arduino et je rajouterai des dans le code pour donner des infos sur ce qu'il se passe dans l'arduino...

  2. #22
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Oui c’est ce que je comptais faire ce week-end. C’est quand même curieux car je change rien au code hormis le fait de l’envoyer dans un autre fichier au lieu de le laisser dans le main...

  3. #23
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Tu as quand même la fonction WebServer qui a changée...

  4. #24
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 584
    Par défaut
    Oui c’est ce que je comptais faire ce week-end. C’est quand même curieux car je change rien au code hormis le fait de l’envoyer dans un autre fichier au lieu de le laisser dans le main...
    Le passage de paramètre par copie au lieu du passage par référence change absolument tout le comportement du bousin.

  5. #25
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Oui je suis d'accord je rectifie :

    Code qui fonctionne "main.ino (.cpp si vous préférez) :

    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
    void loop() 
    {
        while(Wifi.available())
        {
          process(&wifi);
        }
      delay(50);
    }
     
    void process(WifiData *test) 
    {
      String command = test.readStringUntil('/');
     
      if (command == "webserver") 
      {
        WebServer(test);
      }
    }
     
    void WebServer(WifiData *test) 
    {
      int index = -1;
      index = test->parseInt();
     
      test->println(F("HTTP/1.1 200 OK"));
      test->println(F("Content-Type: text/html"));
      test->println();
     
      test->println(F("<!DOCTYPE html>"));
      test->println(F("<html>"));
      test->println(F("<head>"));
      test->println(F("<meta charset=\"utf-8\">"));
     
      if (index == 10)
      {
        page_etat(test);
      }
    }
     
     
    void page_etat(WifiData *test)
    {  
      test->print(F("<meta http-equiv=\"refresh\" content=\"0.1; URL=http://mapageweb.html\">"));
      test->println(F("</head>"));
      test->println(F("<body/>"));
      test->println(F("</html>"));
      test->print(DELIMITER); // very important to end the communication !!!
    }
    et code qui fonctionne pas (fichier main.ino) :

    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
    void loop() 
    {
      while(wifi.available())
      {
        process(&wifi);
      }
     
      delay(50);
    }
     
    void process(WifiData *test) 
    {
      String command = test->readStringUntil('/');
     
      if (command == "webserver") 
      {
        WebServer(test);
      }
    }
     
    void WebServer(WifiData *test) 
    {
     
      short int index = -1;
     
      index = test->parseInt();
     
      if (index == 10) 
      { 
        test->println(F("HTTP/1.1 200 OK"));
        test->println(F("Content-Type: text/html"));
        test->println();
     
        test->println(F("<!DOCTYPE html>"));
        test->println(F("<html>"));
        test->println(F("<head>"));
        test->println(F("<meta charset=\"utf-8\">"));  
        test->print(F("<meta http-equiv=\"refresh\" content=\"0.1; URL=http://mapage.html\">"));
        test->println(F("</head>"));
        test->println(F("<body/>"));
        test->println(F("</html>"));
        test->print(DELIMITER); // very important to end the communication !!!
        //Pages_Web::page_etat(&wifi, &finsDeCourses);
      }
    }
    Rien ne ce passe ! et la c'est les mêmes codes ou alors je deviens fou !

    J'avais omis de le poster.

  6. #26
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Non, dans le premier cas, tu écris des choses même si index != 10.

  7. #27
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Oui je sais mais c’est ce qui est commun à mes 3 possibilités (1,2 et 10) je comptais l’essayer en le mettant avant la condition mais je vois pas ce que ça changerais vu que si je l’ecris Avant et la suite après je comprends pas ce que ça change d’ecrire Tout en suite en fait.

    Dire : «*écris A et si 10 alors écris B*», devrais afficher pareil que de dire : «*si 10 écris A et B*» quand justement j’ai ce 10 là non ?? Enfin la visu a l’ecran Est la même donc je comprends pas pourquoi ça changerais quelque chose dans le programme pour ce cas là en l’occurence.

  8. #28
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    J'ai fais les test avec .

    Il en ressort que j'ai cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motorshield_1.begin();  // Initialise la communication avec shield à la fréquence max ; par defaut : 1.6KHz (1600 bauds/s).
    qui me fait des interférences/conflits visiblement avec tout le reste.

    Cette ligne je l'ai à l'identique dans mon programme qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <Adafruit_MotorShield.h>
     
    Adafruit_MotorShield motorshield_1 = Adafruit_MotorShield(); // Crée un objet "Adafruit_MotorShield" (qui est un shield adafruit controleur moteur), de nom "motorshield_1", avec l'adresse I2C par defaut (sans cavaliers sur la carte pour les adresses).
     
    Adafruit_StepperMotor *moteur = motorshield_1.getStepper(200, 2); // Créé un objet "Adafruit_StepperMotor" (moteur pas à pas), de nom "moteur", avec en paramètres, nombre de pas par tours ("200"), et port sur le shield : ("2" : M3 et M4)
     
    void setup() 
    {
        motorshield_1.begin();  // Initialise la communication avec shield à la fréquence max ; par defaut : 1.6KHz (1600 bauds/s).
        moteur->setSpeed(350);  // Initialise la vitesse max du moteur "moteur" à 350 rpm.
     
        wifi.begin(); // Initialise le serveur wifi.
        wifi.println(F("Web Server is up")); // Préviens le serveur que tout est ok et prêt à etre utilisé.
    }
    et après c'est le code que j'ai déjà posté (if 10 blabla).

    Dans mon nouveau programme je l'ai dans ma classe Motorisation (mon.h) :

    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
    class Motorisation
    {
      public :
     
        Motorisation(Etat_FDC *s_pFinsDeCourses);
     
      private :
     
        Etat_FDC *pFinsDeCourses = NULL;
     
        Servo servo_droit; // Créé un objet "Servo" de nom "servo_droit", représentant le servomoteur de droite.
        Servo servo_gauche; // Créé un objet "Servo" de nom "servo_gauche", représentant le servomoteur de gauche.     
     
        Adafruit_MotorShield motorshield_1 = Adafruit_MotorShield(); // Crée un objet "Adafruit_MotorShield" (qui est un shield adafruit controleur moteur), de nom "motorshield_1", avec l'adresse I2C par defaut (sans cavaliers sur la carte pour les adresses).
     
        Adafruit_StepperMotor *moteur = motorshield_1.getStepper(200, 2); // Créé un objet "Adafruit_StepperMotor" (moteur pas à pas), de nom "moteur", avec en paramètres, nombre de pas par tours ("200"), et port sur le shield : ("2" : M3 et M4) 
    };
    et mon .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Motorisation::Motorisation(Etat_FDC *s_pFinsDeCourses)
    { 
      pFinsDeCourses = s_pFinsDeCourses;
     
      pinMode (PIN_FDC_BAS, INPUT); // Définit la pin "fdc_haut" (3), comme etant une entrée ("INPUT").
      pinMode (PIN_FDC_HAUT, INPUT); // Définit la pin "fdc_bas" (2), comme etant une entrée ("INPUT").
     
      servo_droit.attach(10); // Définit la pin "10", comme etant la sortie du signal pour le servomoteur de droite : "servo_droit".
      servo_gauche.attach(9); // Définit la pin "9", comme etant la sortie du signal pour le servomoteur de gauche : "servo_gauche".
     
      motorshield_1.begin();  // Initialise la communication avec shield à la fréquence max ; par defaut : 1.6KHz (1600 bauds/s).
      moteur->setSpeed(VITESSE_MOTEUR_RPM);  // Initialise la vitesse max du moteur "moteur" à 350 rpm.
    }
    Ma question est donc la suivante :

    Est-ce que de creer un objet Motorisation avec ma procédure est une erreur et je devrais mettre celle ci dans mon main ?

    Et surtout pourquoi ?

  9. #29
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Non, cela doit rester dans le setup.
    Si je comprend bien, si tu ne fais pas ça ton code marche bien ?
    Si oui, tu dois avoir un conflit de pins arduino...
    Quelles sont les pins utilisées par le Wifi ? Et lesquelles sont utilisées par les moteurs ?

  10. #30
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Le Wifi est en 4 et 7 il me semble.
    Le moteur lui est en liaison série car il est sur un Shield pour moteurs pas a pas.
    Elle est initialisée à 1600 bauds de base (au Max pour le shield).

    J’ai contourné le problème en initialisant le wifi avant la lisaison série du Shield du moteur.

    A ce niveau là ça fonctionne.

    A présent j’ai 2 servomoteurs qui eux ne fonctionnent plus. Ils sont pas en liaison série eux juste en direct sur les bornes 9 et 10. Certainement encore une histoire d’interférences. Je cherches plus loin des que j’en aurais le temps.

Discussions similaires

  1. question sur les pointeurs
    Par jd.baculard dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2006, 03h30
  2. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 10h55
  3. [Debutant] Question sur un pointeur
    Par etiennegaloup dans le forum Débuter
    Réponses: 15
    Dernier message: 07/01/2006, 00h34
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 29/10/2005, 00h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 09/01/2005, 00h25

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