Как прочитать массив символов из последовательного монитора и команды Arduino соответственно? - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время я работаю над проектом, чтобы прочитать входные данные с последовательного монитора и дать команду Arduino включить / выключить определенные контакты.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу прочитать весь массив символов, введенный в последовательный монитор.Может кто-нибудь сказать мне, что я делаю не так?

#define X 13 //led pin

char txt[15]; 
int i; 
int Status=0;

void setup() {   // put your setup code here, to run once:  
pinMode(X,OUTPUT);// setting the pin flow of control as output

 Serial.begin(9600);  
 while(!Serial)   
 {
    ;  //to wait for pc to connect  
 }   
 Serial.println("\nHome Automation");   
 dashprint();  


}

void loop() {   // put your main code here, to run repeatedly:  
if(Serial.available()>0)    
{   i=0;
    while(Serial.available()>0)   //if serial available
    { char inchar=Serial.read();
      txt[i]=inchar; // add char to txt string
      i++;// increment to where to write next
      txt[i]='\0'; //null termination

     }    
  Serial.print(txt);    
  check();
  } 
  }

void dashprint() //to print dashes 
{
Serial.println("-----------------------------------------------");  
Serial.println("give me some command"); //ask for command    
  }

void check() 
{    if(strncmp(txt,"ON",2)==0)   
      {
         digitalWrite(X,HIGH);
         Status=1;
          }   
      else if(strncmp(txt,"OFF",3)==0)  
       { digitalWrite(X,LOW);
         Status=0;
          }   
      else if(txt=="STATUS")  
       { 
           } 
      else Serial.println("ERROR");
   }

вывод:

Домашняя автоматизация

дать мне команду OERROR NERROR

ERROR

ожидаемый результат:

Домашняя автоматизация

дать мне команду ВКЛ

1 Ответ

0 голосов
/ 11 февраля 2019

Ваш arduino слишком быстр, чтобы прочитать текст "ON" за один раунд.

9600 - 1 мс на символ.Простой обходной путь - добавить небольшую задержку

if(Serial.available()>0) {
    delay(3); // wait for the whole message
    i=0;
    while(Serial.available()>0)  {
       ...

ADD: Кроме того, вы, очевидно, получаете символ '\ n' (перевод строки).Убедитесь, что это не вызывает проблем.

И увеличить задержку или лучше подходить вообще, если вы ожидаете более 3 символов («СОСТОЯНИЕ»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...