Partage
  • Partager sur Facebook
  • Partager sur Twitter

Liaison série

Serial.print

    26 janvier 2013 à 9:42:18

    Bonjour, 

    j'aimerais que Serial.print m'envoie le chiffre 1 mais il me renvoie 49, si j'ai bien compris c'est 1 en ASCII DECIMAL comment je peux faire pour qu'il m'envoie vraiment 1 ? 

    Merci

    voila le code 

        Serial.flush();
        do
        {
          byte_read2 = Serial.available(); 
          if(byte_read2 > 0) { motor_sens_one = Serial.read();}
              Serial.print("En attente du sens");  
              Serial.println(motor_sens_one);
        }
        while(byte_read2 > -1); 
    • Partager sur Facebook
    • Partager sur Twitter
      26 janvier 2013 à 9:57:26

      Sachant que le 0 c'est 48, tu as juste à faire byte_read2 -= 48;

      Par contre, il faudra faire une condition pour ne pas dépasser 9 (ou alors tu considère que tu ne te tromperas jamais ^^).

      • Partager sur Facebook
      • Partager sur Twitter
      2b||!2b   sqrt(4b²)
        26 janvier 2013 à 11:51:07

        sinon tu peux essayer de faire un serial.write, ca n'envoie qu'un byte (char) et donc le formattage sera peut etre différent
        • Partager sur Facebook
        • Partager sur Twitter

        Retrouvez moi sur mon blog et ma chaine Youtube !

          26 janvier 2013 à 12:28:38

          Merci en effet write écrit bien 1 

          Comment ça ce fait que le formatage de Serial.println soit bon dans le tuto mais pas pour moi ? 

          par contre mon do...while ce stoppe pas ... 

          • Partager sur Facebook
          • Partager sur Twitter
            26 janvier 2013 à 13:02:04

            N'ayant pas le tuto sous les yeux pour le moment je vais pas répondre de peur de dire des bêtises...

            btw, ton code est assez perturbant à lire, on dirait que l'indentation est faite pour le if alors que pas du tout....

            Il affiche quoi ton deuxième Serial.println ?

            • Partager sur Facebook
            • Partager sur Twitter

            Retrouvez moi sur mon blog et ma chaine Youtube !

              26 janvier 2013 à 13:35:19

                while(byte_read2 != -1 )
                  {
                    byte_read2 = Serial.available(); 
                    Serial.print("En attente du sens");  
                    Serial.write(motor_sens_one);
                    Serial.println();
                    if(byte_read2 != -1) { motor_sens_one = Serial.read();}
                   
                  }

              J'ai un peu modifié le code et je l'ai rendu plus lisible ^^  

              le Serial.println affiche 1 c'est pour ça que je comprend pas pourquoi Serial.available me dit qu'il y a rien dans le buffer...

              Voila le code complet 

              const int motor_one_one = 2; //moteur 1 
              const int motor_one_two = 3; //moteur 1 
              const int motor_two_one = 4; //moteur 2
              const int motor_two_two = 5; //moteur 2
              const int motor_three_one = 6; //moteur 3 
              const int motor_three_two = 7; //moteur 3
              const int sensor_flow = 8; //capteur de courant
              const int motor_one = 9; //voyant moteur 1
              const int motor_two = 10; //voyant moteur 2
              const int motor_three = 11; //voyant moteur 3
              long time; //temps
              char motor_activate = 0;
              byte motor_sens_one = 0;
              int byte_read2;
              void setup() 
              {
                pinMode(motor_one_one, OUTPUT); 
                pinMode(motor_one_two, OUTPUT); 
                pinMode(motor_two_one, OUTPUT); 
                pinMode(motor_two_two, OUTPUT); 
                pinMode(motor_three_one, OUTPUT); 
                pinMode(motor_three_two, OUTPUT); 
                pinMode(motor_one, OUTPUT); 
                pinMode(motor_two, OUTPUT); 
                pinMode(motor_three, OUTPUT); 
                pinMode(sensor_flow, INPUT); 
                Serial.begin(9600);
              
              }
              void loop() 
              {
              
                byte byte_read = Serial.available(); 
                if(byte_read > 0) {
                  motor_activate = Serial.read(); 
                }
                if(motor_activate== '1'){ //moteur 1 s'allume
                  Serial.println("Moteur 1 selectionne");  
                  Serial.flush();
                  digitalWrite(motor_one, HIGH); 
                  byte_read2 = Serial.available(); 
                 while(byte_read2 != -1 )
                {
                  byte_read2 = Serial.available();
                  Serial.print("En attente du sens"); 
                  Serial.write(motor_sens_one);
                  Serial.println();
                  if(byte_read2 != -1) { motor_sens_one = Serial.read();} 
                }
              
                  if(motor_sens_one == '1'){
                    char* variable1 = "moteur 1 allumé sens inverse aiguille d'une montre";
                    Serial.println(variable1);
                    digitalWrite(motor_one_one, LOW); 
                    digitalWrite(motor_one_two, HIGH); // tourne sens inverse aiguille d'une montre
                    long motor_time_one = Serial.read();
                    long time_one = motor_time_one + time;
                    if(time_one - time < motor_time_one) { // on stoppe le moteur
                      digitalWrite(motor_one_two,LOW); // on passe donc le pin 3 en LOW
                    }       
                  }
                  if(motor_sens_one == '2' ){
                    char* variable1 = "moteur 1 allumé sens aiguille d'une montre";
                    //  Serial.println(variable1);
                    digitalWrite(motor_one_one, HIGH); // tourne sans aiguille d'une montre
                    digitalWrite(motor_one_two, LOW);
                    long motor_time_one = Serial.read();
                    long time_one = motor_time_one + time;
                    if(time_one - time < motor_time_one) { // on stoppe le moteur
                      digitalWrite(motor_one_one,LOW); // on passe donc le pin 2 en LOW
                    }       
                  }
                  motor_activate = 0;
                }
                

              J'ai une autre petite question aussi. dès que je manipule des nombres que ça soit en int string ou tout autre variable je me retrouve avec des nombre en ASCII DECIMAL c'est à dire que je vais à la place de me retrouver avec 05000 avec 4853484848 est-il possible de forcé l'écriture "normal" ou ça viens de l'arduino ? 

              for(char compt = 7; compt < 12; compt++){
                 time_one = String(communication[compt]);
                  }
                if(time_one=="4853484848"){digitalWrite(motor_three,HIGH);}
                  Serial.write("/");
                  Serial.println(time_one);
              • Partager sur Facebook
              • Partager sur Twitter

              Liaison série

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown