Arduino ne peut pas lire correctement Série
Bien, j'ai googlé obtenir une chaîne de Série avec Arduino et je n'ai pas eu la chance, même la copie et le collage d'exemples.
Je vais essayer d'obtenir une chaîne de caractères de la Série. Voici mon code:
void setup() {
Serial.begin(9600);
Serial.write("Power On");
}
void loop()
{
while(!Serial.available());
while (Serial.available() > 0) {
Serial.write(Serial.read());
}
Serial.println();
}
Et c'est l'impression de caractère par caractère.
J'ai aussi essayé
char* read(int len) {
while (!Serial.available());
char str[len];
int i = 0;
while (i < len) {
str[i] = 'char* read(int len) {
while (!Serial.available());
char str[len];
int i = 0;
while (i < len) {
str[i] = '\0';
int inByte = Serial.read();
Serial.println(inByte);
if (inByte == -1) {
return str;
} else {
str[i++] = inByte;
}
}
return str;
}
';
int inByte = Serial.read();
Serial.println(inByte);
if (inByte == -1) {
return str;
} else {
str[i++] = inByte;
}
}
return str;
}
Et retourne 1 caractère à la fois (de série.print(inByte) donne -1 à chaque fois). Pourquoi la Série de fractionnement de chaque personnage?
Si j'entre "bonjour" et je l'appelle de série.read (), il donne un caractère dit alors il n'y a rien, puis donne un autre caractère et dit il n'y a rien.
Les ports série sont très lents. Généralement, vous obtenez un seul octet à la fois, puis plus rien pendant un moment. Vous aurez besoin de votre code, vous ne le font pas maintenant.
OriginalL'auteur Raekye | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris.
Lorsque vous ouvrez une Série à 9600 bauds (
Serial.begin(9600);
), c'est la lecture/écriture à 9600 octets par seconde. Que signifie au plus rapide, il peut faire un peu moins de 10 octets par milliseconde. Je ne sais pas ce que la vitesse d'exploitation est, mais il semble que l'Arduino reçoit alerté de et on lit le premier octet avant le deuxième arrive. Donc, vous devez ajouter undelay(1)
à "attendre" pour un autre octet dans la "même catégorie" arriver.Vous pouvez demander, eh bien, puisque vous êtes retarder comment savez-vous si l'utilisateur est juste en tapant très vite? Vous ne pouvez pas l'éviter ici, puisque la Série est essentiellement limitée à une certaine vitesse. Toutefois, l'utilisateur doit taper la quasi-incroyablement rapide pour les deux entrées à confondre comme l'un.
OriginalL'auteur Raekye
Je n'ai pas accès à l'Arduino fichiers source ici, mais la ligne de code suivante ne vous donnera pas une Chaîne complète pour des raisons évidentes (laissez-moi savoir si ce n'est pas évident):
Également, à l'aide de
vous allez envoyer l'octet par octet. C'est le contraire de
dans lequel vous serez l'envoi des phrases complètes.
Je voudrais essayer de travailler avec un numéro de Série.print() ou println() plutôt que de Série.write().
Vous pouvez consulter les références:
http://arduino.cc/en/Serial/Write
http://arduino.cc/en/Serial/Println
OriginalL'auteur Cassio
Même si ce post est vieux, je vais poster ma réponse au cas où quelqu'un googles leur chemin ici.
Pour la lecture des chaînes de la série, vous pouvez utiliser les éléments suivants:
Fonctionne comme un charme!
OriginalL'auteur Scopperloit
Il existe un retard lors du transfert de données via UART. Avoir un essai avec un numéro de Série.timedRead() à la place. Le code est comme ci-dessous.
OriginalL'auteur Jeffrey
OriginalL'auteur Alexander Turro