2017-08-03 1 views
0

s'il vous plaît aider Je suis aveugleMa ligne de commande série pour Arduino ne fonctionne pas et je ne sais pas pourquoi

void commandline() { 
    if (Serial.available() > 0) 
    { 
    String command = Serial.readStringUntil(' '); 
    String commandvar = Serial.readString(); 

    Serial.print(command); 
    Serial.print(" | "); 
    Serial.println(commandvar); 

    if (command == "fans" || command == "Fans" || command == "FANS") 
    { 
     Serial.println("Command Recognized"); 
     if (commandvar == "on" || commandvar == "On" || commandvar == "ON") 
     { 
     Serial.println("     Fans are now ON"); 
     digitalWrite(2, HIGH); 
     digitalWrite(3, HIGH); 
     } 
     else if (commandvar == "off" || commandvar == "Off" || commandvar == "OFF") 
     { 
     Serial.println("     Fans are now OFF"); 
     digitalWrite(2, LOW); 
     digitalWrite(3, LOW); 
     } 
     else 
     { 
     Serial.println("commandvar isn't valid"); 
    } 
    } 

quand je regarde la console série et envoie « fans sur », les broches de la console sur

fans | on 

Command Recognized 
commandvar isn't valid 

toute aide serait très apprécié

=========================

extra info

1) J'appelle commandline() de la boucle() toutes les 10 millisecondes

2) La commande des ventilateurs n'est pas la seule commande que je l'ai est juste que je dois les convertir à travailler avec la nouvelle variables de commande I créé

3) J'utilise l'Arduino Uno Rev 3

+0

Le bon sens voudrait dire que si vous obtenez une commande non reconnue, vous pouvez l'éditer peut voir si ce que vous pensez avoir envoyé est ce que votre code pense qu'il reçoit, n'est-ce pas? Apprendre à déboguer en utilisant des techniques simples est une compétence précieuse que vous devriez probablement faire un effort pour apprendre. –

+0

Etes-vous sûr qu'il y a du C++ impliqué ici? – Gerhardh

Répondre

1

la sortie est une indication: Il y a une ligne blanche. me dit que commandvar = "on\n" et donc != "on"

Vous pouvez confirmer cela est le problème en vérifiant la longueur de la chaîne - si elle est> 2 alors il y a un certain caractère spécial (s) là-bas que vous ne vous attendiez pas. Si les caractères ne sont que des espaces blancs, alors vous avez juste besoin de commandvar.trim() pour avoir juste la partie importante (ie pas d'espace)

+0

alors dites-vous que je devrais utiliser commandvar.trim? – Psaidiwd

+0

Merci beaucoup, cela fonctionne parfaitement – Psaidiwd