2012-06-04 241 views
1

我正在嘗試編寫代碼來存儲串行終端中{和}之間的命令文本。到目前爲止,我有:Arduino:如何將char數組中的值存儲在一行中然後清除/清空char數組?

byte index = 0; // Index into array; where to store the character 
char cmdArr[10]; 

boolean startOfLine = false; 
boolean endOfLine = false; 

void setup() 
{ 
    Serial.begin(38400); 
} 

void serialEvent() 
{ 
    while (Serial.available()) 
    { 
    char cmd = (char)Serial.read(); 

    if (cmd == '{') 
    { 
     startOfLine = true; 
    } 

    if (cmd == '}') 
    { 
     endOfLine = true; 
     //cmdArr[index] = '\0'; //null terminate the C string; I'm not sure if this is needed 
    } 

    if (startOfLine && cmd != '{' && cmd != '}') 
    { 
     cmdArr[index++] = cmd; 
    } 

    if (startOfLine && endOfLine) 
    { 
     int i; 

     for (i = 0; i < 10; i++) 
     { 
     //Do something with the command 
     } 

     startOfLine = false; 
     endOfLine = false; 
     break; 
    } 
    } 
} 

void loop() 
{ 
} 

我能夠迭代通過cmdArr打印出數組值。現在,例如,命令被存儲如下:char cmdArr [10] = {'p','h','c','\ 0'};是否可以存儲命令,如char cmdArr [10] = {「phc」};?另外,如何清除/清空該命令以準備下一個命令?

似乎正在工作的新代碼。我採取使用一個字符串,因爲它似乎是最簡單的方法:

String cmdData; //Store the complete command on one line to send to sensor board. 

boolean startOfLine = false; 
boolean endOfLine = false; 

void setup() 
{ 
    Serial.begin(38400); 
    Serial3.begin(38400); 
} 

void serialEvent() 
{ 
    while (Serial.available()) 
    { 
    char cmd = (char)Serial.read(); 

    if (cmd == '{') 
    { 
     startOfLine = true; 
    } 

    if (cmd == '}') 
    { 
     endOfLine = true; 
    } 

    if (startOfLine && cmd != '{' && cmd != '}') 
    { 
     //Serial.print("Send command"); 
     cmdData += cmd; 
    } 

    if (startOfLine && endOfLine) 
    { 
     startOfLine = false; 
     endOfLine = false; 

     cmdData += '\r'; 

     Serial3.print(cmdData); 

     cmdData = ""; 
    } 
    } 
} 

void serialEvent3() 
{ 
    char cmd3 = (char)Serial3.read(); 
    Serial.print(cmd3); 
} 

void loop() 
{ 
} 
+1

'cmdArr [10] =「phc \ 0」'可以工作。另外,'cmdArr'可以和'&(cmdArr [0])'一樣使用;都是'char *'類型,它與C中的'真實'字符串非常接近。對字符串進行操作的操作(比如'strcmp()')會將'char *'作爲輸入,代表'字符串'變量。 – JimmyB

回答

1

的cmdArr是一個連續的內存塊。從某種意義上說,數據已經存儲爲「phc \ 0」。您應該可以使用cmdArr作爲指針,以便能夠將數據作爲字符串打印,而不是逐個訪問字符(您也可以使用指針逐個訪問字符)。 在你的解決方案中,我不認爲你需要清除數組。把索引設置爲0就足夠了,並且確保當你用\ 0(你已經在做什麼)寫了所有字符時,你終止字符串。 C中的字符串是零終止的。如果你想在你的循環中逐個處理內容,你需要退出循環,如果你遇到零。

相關問題