2017-06-25 4 views
-1

J'ai un Arduino Leonardo et j'essaie de l'utiliser comme un convertisseur série vers USB. Sur Serial1 j'ai une chaîne se terminant par un nombre. Ce numéro que j'essaie d'obtenir via USB sur le PC. Cela fonctionne très bien mais j'ai besoin d'un '\n' à la fin et je ne sais pas comment. Quand je l'essaye sur la ligne Keyboard.println ou Keyboard.write, j'obtiens un nombre différent de lignes avec le nombre prévu en splitté.Impossible d'ajouter un saut de ligne à la chaîne

#include <Keyboard.h> 
String myEAN =""; 
const int myPuffergrosse = 50; 
char serialBuffer[myPuffergrosse]; 
void setup() { 
    Keyboard.begin(); 
    Serial1.begin(9600); 
    delay(1000); 
} 
String getEAN (char *stringWithInt) 
// returns a number from the string (positive numbers only!) 
{ 
    char *tail; 
    // skip non-digits 
    while ((!isdigit (*stringWithInt))&&(*stringWithInt!=0)) stringWithInt++; 
    return(stringWithInt); 
} 

void loop() { 
    // Puffer mit Nullbytes fuellen und dadurch loeschen 
    memset(serialBuffer,0,sizeof(myPuffergrosse)); 
    if (Serial1.available()) { 
     int incount = 0; 
     while (Serial1.available()) { 
      serialBuffer[incount++] = Serial1.read();  
     } 
     serialBuffer[incount] = '\0'; // puts an end on the string 
     myEAN=getEAN(serialBuffer); 
     //Keyboard.write(0x0d); // that's a CR 
     //Keyboard.write(0x0a); // that's a LF 
    } 
} 
+1

Un clavier envoie des clés et non des caractères. La bibliothèque traduit simplement le caractère de saut de ligne dans la touche "Entrée". –

+0

Bienvenue dans Stack Overflow! Veuillez lire [Comment poser une bonne question?] (Http://stackoverflow.com/help/how-to-ask) avant d'essayer de poser d'autres questions. –

+0

pourquoi est-ce que vous définissez le dernier caractère à 'null' c'est ce que' \ 0' est-ce que vous réalisez? Cela délimite la chaîne pas "\ n" vous avez besoin de mettre le '\ n' AVANT le' \ 0 'le plus probable. –

Répondre

0

Depuis myEAN est une chaîne, il suffit d'ajouter le caractère ...

myEAN += '\n'; 

Ou, pour une combinaison de retour chariot complet/ligne:

myEAN += "\r\n"; 

Voir la doc: https://www.arduino.cc/en/Tutorial/StringAppendOperator

Je vous suggère d'utiliser String dans votre fonction getEAN aussi ...

String getEAN(String s) 
{ 
    // returns the first positive integer found in the string. 

    int first, last; 
    for (first = 0; first < s.length(); ++first) 
    { 
    if ('0' <= s[first] && s[first] <= '9') 
     break; 
    } 
    if (first >= s.length()) 
    return ""; 

    // remove trailing non-numeric chars. 
    for (last = first + 1; last < s.length(); ++last) 
    { 
    if (s[last] < '0' || '9' < s[last]) 
     break; 
    } 

    return s.substring(first, last - 1); 
} 
+0

a newLine, newLine, 123, newLine – toolsmith

+0

Faites votre propre, alors. –