Lenteur de la communication série avec arduino? La latence de près de 1 sec?
Juste essayer quelques choses, que je veux utiliser mon Arduino Nano comme une interface pour mon ordinateur avec un couple de LED et les boutons. J'ai donc besoin d'envoyer certaines commandes et de données à l'Arduino à partir de mon PC. Cependant, je trouve la communication série de l'Arduino assez lent. En fait, à partir du moment où j'appuie sur Entrée pour envoyer ma commande dans la Série du Moniteur prend presque une seconde à exécuter (dans ce cas, pour contrôler une LED).
Est-ce une limitation ou peut-il être accéléré en quelque sorte?
Voici mon code simple:
String cmd;
int loopNum;
int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
if(loopNum == 0) {
Serial.println("Waiting for commands"); //Only display this when sketch is initiated.
}
cmd = Serial.readString();
if(cmd == "LEDON") {
digitalWrite(ledPin, HIGH);
Serial.println("LED ON");
}
if(cmd == "LEDOFF") {
digitalWrite(ledPin, LOW);
Serial.println("LED OFF");
}
if(cmd == "HELP") {
Serial.println("Available commands:\nLEDON\nLEDOFF\nHelp");
}
loopNum++; //Counts the loop...
delay(50);
}
Changer le débit en bauds de la série ne semble pas changer quoi que ce soit.
Un peu d'aide serait appréciée! 🙂
- Vous n'êtes pas vérifier si il n'y a rien à lire lorsque vous appelez le numéro de Série.readString(). Vous avez découvert que le défaut de la Série.setTimeout() est de 1000 millisecondes.
Vous devez vous connecter pour publier un commentaire.
Solution a été de définir:
Merci à tous!
À mon avis, pour améliorer votre programme, vous devez modifier votre code:
Je suppose que vous n'avez pas besoin de compter la boucle (il n'y a aucune raison pourquoi vous devez le faire, l'amélioration de retard).
À l'aide de Numéro de série.disponible (en) fonction de vous aider à vérifier si les déclarations juste si quelqu'un est d'envoyer une chaîne de caractères dans la série du moniteur (réduction de retard).
Enfin, pour imprimer quelque chose de juste une fois dans votre programme, vous pourriez le mettre dans le Setup() fonction.
Lorsque vous envoyez une chaîne à partir de la série du moniteur, il envoie toutes les cordes une par une. Donc, si vous envoyez 'LEDON' il va transférer 5 caractères un par un en série. C'est pourquoi il faut un certain temps dans l'exécution.