Partage
  • Partager sur Facebook
  • Partager sur Twitter

Entrer plusieurs variables port série Arduino

    5 juin 2018 à 14:36:20

    Bonjour, 

    J'aimerai savoir s'il est possible de rentrer plusieurs variables dans le port série Arduino à 2 endroits différents du programme.

    Par exemple avoir un Serial.available dans la fonction loop et un autre Serial.available dans une fonction que l'on appelle. 

    C'est dans un cas d'utilisation de moteur pas à pas pour rentrer le nombre de pas voulu et le nombre de fois qu'il fait ce nombre pas entré précédemment.

    Merci de votre aide 

    • Partager sur Facebook
    • Partager sur Twitter
      6 juin 2018 à 13:51:45

      La fonction Serial.available te renvoie si oui ou non un caractère a été reçu, c'est tout.

      Tu peux l'appeler où tu veux mais elle ne fait pas la distinction entre une valeur et une autre puisque pour elle, tout ce qui importe, c'est si un caractère peut être lu ou non avec Serial.read.

      Le mieux serait de faire un petit protocole basé sur des chiffres et des lettres.

      Par exemple, tu pourrais envoyer : 500P32X

      Coté arduino, on aurait le comportement suivant :

      • Si le caractère est un chiffre, alors on l'enregistre dans un nombre temporaire
      • Si le caractère est un P, alors on considère le nombre temporaire comme étant un nombre de pas, puis on le remet à 0
      • Si le caractère est un X, alors on considère le nombre temporaire comme étant un nombre de fois, puis on le remet à 0
      • Partager sur Facebook
      • Partager sur Twitter
        7 juin 2018 à 9:15:54

        Merci de ta réponse.

        J'ai déjà fait un protocole comme celui-ci mais mon problème est qu'à un moment je dois rentrer des informations et ensuite je dois rentrer d'autres informations si une condition se produit, et la valeur que je rentre si la condition se produit s'affecte à mon premier Serial.available.

        Je ne trouve pas la méthode pour que mon deuxième Serial.available ne soit pas confondu avec le premier.

        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2018 à 10:17:47

          Tu n'as qu'à utiliser une variable qui retient le mode dans lequel tu es pour savoir si les caractères reçus sont pour la première ou la seconde condition.

          Exemple:

          int mode = 0;    // Mode de réception: 0= invalid, 1=première condition, 2=seconde condition
          
          
          void loop() {
          
              // Première condition:
              if ( ( mode == 1 ) && Serial.available() ) {
          
                  // ...
          
              }
          
          
              // Seconde condition:
              if ( ( mode == 2 ) && Serial.available() ) {
          
                  // ...
          
              }
          
          }



          • Partager sur Facebook
          • Partager sur Twitter
            14 mars 2022 à 2:20:18

            Hello, 

            Ayant essayé d'utiliser une variable qui retient le mode dans lequel je travaille, selon ce conseil; mode = 0; et dans tous les sens ça à pas l'air de fonctionner correctement.

            Pourtant le mode opératoire est le même. Que pense tu de cette approche a trois variables qui s'additionnent entre elles.

            void loop() {

              int MODE = 0;

              int total;

              int cardispo1 ;

              int cardispo2 ;

              int cardispo3 ;

              cardispo = Serial.available();

              if (( MODE = 1 ) &&  Serial.available() > 0 )  {     // Ici le même procédé conseillé avec mode = 1

                int cardispo1 = Serial.parseInt();

                if ( 100 >= cardispo1 >= 1 )  {

                  Serial.print(" VARIABLE 1 :  ");    Serial.print( cardispo1 );

                  Serial.println("  ENTER DATA 2");

                }

              }

              cardispo = Serial.available();

              if (( MODE = 2 ) &&  Serial.available() > 0 )  {     // Ici le même procédé conseillé avec mode = 2

                int  cardispo2 = Serial.parseInt();

                if ( 50 >= cardispo2 >= 1   )  {

                  Serial.print("  VARIABLE 2 : ");   Serial.print( cardispo2 );

                  Serial.println("  ENTER DATA 3");

                }

              }

              cardispo = Serial.available();

              if  (( MODE = 3) &&  Serial.available() > 0  ) {    // Ici le même procédé conseillé avec mode = 3, le dernier.

                int cardispo3 = Serial.parseInt();

                if ( cardispo3 >= 500)   {

                  Serial.print("  VARIABLE 3 :  ");  Serial.println( cardispo3 );

                  total = (( cardispo1 ) + ( cardispo2 ) + ( cardispo3 ));

                  Serial.printl(" TOTAL ADDITION :  ");   Serial.println( total );

                  cardispo = Serial.available();

                }

              }

            }

            • Partager sur Facebook
            • Partager sur Twitter
              14 mars 2022 à 4:10:47

              @Nicolas LC:
              Tu as déterré un sujet vieux de juin 2018 et le PO ne s'est pas connecté depuis novembre 2019.
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                14 mars 2022 à 8:29:34

                if (( MODE = 1 ) &&  Serial.available() > 0 )

                Attention à ne pas confondre affectation (un seul signe égal) et comparaison (double signe signe).

                On pourrait aussi des parenthèses, ça ne ferait pas de mal histoire de savoir sur quoi s'applique les comparaisons.

                Dans ton cas, il faudrait écrire :

                if ( ( MODE == 1 ) &&  (Serial.available() > 0) )

                -----

                Tu as aussi cette ligne qui pose problème :

                if ( 50 >= cardispo2 >= 1   )  {

                Ce genre de chose est valide en mathématique mais pas en programmation, il te faudrait écrire :

                if ( (50 >= cardispo2) && (cardispo2 >= 1)   )  {
                • Partager sur Facebook
                • Partager sur Twitter

                Entrer plusieurs variables port série Arduino

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown