Utilisation de la fonction strtok (Arduino et voie série)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Utilisation de la fonction strtok (Arduino et voie série)



  1. #1
    Shantorian

    Utilisation de la fonction strtok (Arduino et voie série)


    ------

    Bonjour,

    Malgré mes recherches et tous les exemples que j'ai pu trouvé, j'arrive pas à utiliser correctement cette fonction. Voici mon problème :

    Une carte Arduino reçoit des données via la voie série depuis un programme python :
    Code:
    serie2.write(str(float(freqmax)).encode('ascii') str(float(antiphase)).encode('ascii'))
    J’espère ne pas me tromper mais normalement la ligne python fonctionne, du moins j'ai pu tester avec une seule valeur, pas un couple.

    Je veux récupérer ces deux valeurs simultanément. J'ai donc écrit sur python :

    Code:
     if (Serial.available() > 0 ) {
             char donnees = Serial.read();
             char freqmax
             char antiphase = strtok(donnees," ");
             freqmax = float(freqmax);
             antiphase = float(antiphase);
     }
    Est-ce la bonne syntaxe ? Je n'ai pas l'impression que cela fonctionne (je ne peux pas tester immédiatement, mais j'y réfléchis).

    J'ai une seconde question : En fait comme python monopolise la voie série, si j'ouvre la moniteur pour vérifier si tout se que j'envoie est bon tout saute, il y a-t-il un moyen de contrôler se qui transite sur la voie série ?

    J'ai quelques connaissances de bases, mais je ne suis pas du tout habitué au langage arduino, python un peu plus...

    Merci d'avance !

    -----

  2. #2
    albanxiii
    Modérateur

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Bonjour,

    Vous avez un exemple clair de l'utilisation de strtok ici https://www.tutorialspoint.com/c_sta...ion_strtok.htm par exemple.
    Not only is it not right, it's not even wrong!

  3. #3
    Shantorian

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Merci, donc à partir de cet exemple je me suis pas mal cassé la tête, puis j'ai enfin un code qui marche, je le poste si jamais quelqu'un tombe sur cette discussion et a le même problème que moi :

    EDIT : la fonction python a été modifié les valeurs envoyées sont :
    Code:
     serie2.write((str(round(float(freqmax),3))+","+str(antiphase)).encode('ascii'))
    Code:
    boolean ant = false;
    float antiphase=0.0;
    float freqmax = 0.0;
    float k = 0.0;
    float j = 0.0;
    boolean truc = false;
      
     while (Serial.available() > 0 ) {
       truc = true;
       int str = Serial.read();
       if (str==','){
        ant = true;
        }
       else{
        if(str!='.'){
         if(ant==false){
          freqmax = freqmax + (str-48)*pow(10.0,k);
          k = k-1;
           }
         else{
           antiphase = antiphase + (str-48)*pow(10.0,j);
           j = j-1;
           }}
         }
       }
       if(truc==true){
        lcd.setCursor(0, 0);
       lcd.print("freqmax = ");
       lcd.setCursor(10, 0);
       lcd.print(freqmax);
       lcd.setCursor(0, 1);
       lcd.print("antiphase = ");
       lcd.setCursor(12, 1);
       lcd.print(antiphase);
       delay(500);
       truc == false;
       }
    Le C/C++ est très bizarre : Serial.read récupère les bytes un à un et code les valeurs de 0 à 9 de 48 à 57...
    Dernière modification par Shantorian ; 16/12/2017 à 21h53.

  4. #4
    Shantorian

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Oui finalement j'ai même pas réussi à utiliser la fonction..

  5. A voir en vidéo sur Futura
  6. #5
    albanxiii
    Modérateur

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Comment ça ?
    Votre code ne fonctionne pas comme vous le voulez ?
    Not only is it not right, it's not even wrong!

  7. #6
    Ikhar84
    Animateur Informatique

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Citation Envoyé par Shantorian Voir le message
    Le C/C++ est très bizarre : Serial.read récupère les bytes un à un et code les valeurs de 0 à 9 de 48 à 57...
    Avant d'aller plus loin, je pense qu'il est urgent de comprendre en quoi consiste un codage.
    En particulier le codage ASCII...
    Il faut comprendre la différence entre un symbole (caractère) et sa representation en machine.
    Ici, par exemple, le caractère 9 est representé en machine par le nombre décimal 57 (38 en hexa...).

    Serial.read() ne code rien du tout. Suivant le type de la variable qui recoit la donnée (caractère ou entier), pour simplifier vulgairement, tu auras pour le caractère '9' la valeur "caractère" codée en ASCII (ou unicode ou autre. ), soit '9', soit sa valeur numérique: 57...

    Citation Envoyé par Shantorian Voir le message
    Code:
    int str = Serial.read();
    str est bien un entier ici... reste à obtenir le caractère correspondant à cette valeur numérique...

    Si tu attends un nombre, il faudra faire une nouvelle "conversion" de ce "caractère" et ne pas confondre le symbole avec sa representation, soit, à partir du caractère '9' obtenir le chiffre 9 et non le nombre 57...
    Dernière modification par Ikhar84 ; 17/12/2017 à 11h01. Motif: Balise quote défectueuse...
    J'ai glissé Chef !

  8. #7
    Jack
    Modérateur

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Ici, par exemple, le caractère 9 est representé en machine par le nombre décimal 57 (38 en hexa...).
    petite rectification, le caractère 9 est représenté par 39 en hexadécimal.

  9. #8
    Shantorian

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Merci, je comprends mieux, j'ai jamais eu vraiment de cours d'info pratique..

    En tout cas mon code marche parfaitement maintenant

  10. #9
    Ikhar84
    Animateur Informatique

    Re : Utilisation de la fonction strtok (Arduino et voie série)

    Citation Envoyé par Jack Voir le message
    petite rectification, le caractère 9 est représenté par 39 en hexadécimal.
    Oui merci et désolé Jack

    J'ai du mal à depasser 10 avec mes doigts

    Je voulais surtout insister sur le fait qu'il ne faut pas confondre le symbole avec sa représentation.
    J'ai glissé Chef !

Discussions similaires

  1. voie série arduino
    Par harominc dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 24/11/2017, 23h44
  2. série numérique, suite de fonction,série de fonction
    Par 369 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 02/12/2011, 17h24
  3. Voie Lactée: 1ere utilisation de DeepSkyStacker
    Par invite77b52c56 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 9
    Dernier message: 27/07/2008, 21h05
  4. Utilisation des médicaments par voie nasale
    Par invite201abb0d dans le forum Santé et médecine générale
    Réponses: 3
    Dernier message: 07/06/2008, 19h03
  5. fonction strtok et pointeur en µC (PIC)
    Par invite3bf0caa8 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/05/2008, 17h12