comment puis-je lire le port série d’arduino lorsque j’entre les caractères et ‘entre’ dans le clavier

user824624

comment puis-je lire le port série d’arduino lorsque j’entre les caractères et ‘entre’ dans le clavier


Je veux créer un programme arduino qui peut attendre dans la boucle, jusqu’à ce que j’entre une certaine sensibilité et que j’entre le ‘Enter’ dans le clavier, afin que le programme puisse ensuite lire tous les caractères du port série et les imprimer

char line[80];
void setup() {                
  Serial.begin(9600);
}

void loop()  { 
  char c, *p;
  do {
    if (Serial.available() > 0) {
      //Serial.println("s");
      c = Serial.read();
      Serial.println(c);
      if ( c == 'n' || c == 'r' || c=='') {
    Serial.println("break");
        break;
      }
    }
  }while(c != 'n' && c!= 'r');    
}

J’utilise while (Serial.available ()> 0) dans l’espoir que le programme puisse attendre jusqu’à ce que j’entre dans le clavier, mais le problème de maniement est que la série ne reconnaît pas le ‘ n’ ou ‘ r’, donc il imprimerait le caractère à chaque fois que j’entrerais mais n’imprimerait jamais le ‘break’.

Comment puis-je le faire

Réponses


 JRobert

Tout d’abord, ‘Serial.println (« loop ») « va s’exécuter à chaque fois que loop () est appelé, qu’il y ait des caractères disponibles ou non. Cela vous montrerait que la boucle est en cours d’exécution, mais elle est susceptible d’obscurcir la sortie lorsque vous en obtenez.

Deuxièmement, la boucle while () ne vous attendra pas pour terminer la saisie; il ne collectera que le caractère (ou peut-être deux) que vous venez de taper, puis quittera, imprimant la phrase partielle à chaque fois.

Troisièmement, ‘* line + = (char) Serial.read ()’ ne fait pas quelque chose de très différent de ce que je pense que vous vouliez. Si vous essayez de mettre des caractères dans un tableau, vous avez besoin d’un index ou d’un pointeur dans le tableau que vous incrémentez après avoir stocké chaque caractère.

Voici un exemple (il existe d’autres façons de le faire pour éviter où du code en double, mais cette façon est plus proche de la structure de votre programme d’origine):

char line[80];
int count = 0;

void setup() {                
   Serial.begin(9600);
   Serial.println("loop");  // prompt for a sentence
}

void loop() {

   // loop() will called faster than you can type so there's
   // no need for the next block to loop; you need only test
   // once for the presence of one or more characters.
   if (Serial.available() > 0) {

      line[count] = (char)Serial.read(); // store the char
      if (line[count++] == 'r'){        // if its a CR,
         line[count] = '';             //  zero-terminate it
         Serial.println(line);           //  and print it.

         Serial.println("loop");         // re-prompt
         count = 0;                      //  and reset the index.
      }
   }
}
Connor Wolf

Il convient de noter que si vous entrez plus de 80 caractères sans appuyer sur « Entrée », ce programme commencera à écrire dans la mémoire en dehors du tableau line. Cela peut fonctionner, ou il peut assommer toutes les variables / programmes-opcodes que le compilateur a placés dans la mémoire immédiatement après la linevariable.

JRobert

Bon point. Cependant, comme le PO semblait être un premier exercice d’E / S en série, il semblait contre-productif d’ajouter bien plus que de réparer ce qui existait déjà. Je prends souvent des raccourcis lorsque j’écris des séquences expérimentales que je ne ferais pas pour le code de code de production. Bien sûr, vous pouvez vous faire mordre, mais vous pouvez tout aussi bien vous tordre en essayant d’en faire trop dans une expérience. (L’aphorisme, « Lorsque vous êtes à la hauteur de vos alligators, il est difficile de se rappeler que vous êtes venu pour vider le marais », me vient à l’esprit ….)

user824624

le problème de maniement est que la série ne peut pas reconnaître le ‘/ n’ ou le ‘/ r’

Shamtam

Mettez-vous dans ‘/ n’ ou ‘ n’? Notez la barre oblique inverse (au lieu de la barre oblique inverse). Les littéraux utilisent toujours une barre oblique inverse.

JRobert

Le code tel qu’il est écrit doit détecter la touche Entrée et il suppose que la touche Entrée envoie uniquement CR. Si votre programme terminal envoie CR & LF, le code devra lire et supprimer un caractère de plus à chaque fois qu’il obtient un CR.

 

#et, caractères, clavier, comment, d’arduino, dans, entre, j’entre, Le, Les, lire, lorsque, port, Puis-je, série

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *