我的背景不在C中(它在Real Studio中 - 類似於VB),我真的很費力地分割逗號分隔的字符串,因爲我不習慣低級別字符串處理。分割逗號分隔的整數字符串
我正在通過串行發送字符串到Arduino。這些字符串是特定格式的命令。例如:
@20,2000,5!
@10,423,0!
'@'是表示新命令和'!'的標題,是標記命令結束的終止腳註。 '@'後面的第一個整數是命令ID,其餘的整數是數據(作爲數據傳遞的整數數量可以是0-10個整數)。
我寫了一個草圖,它獲取命令(剝離'@'和'!'),並在有命令處理時調用handleCommand()
函數。問題是,我真的不知道如何分割這個命令來處理它!
這裏的草圖代碼: 「@ 20,2000,5」
String command; // a string to hold the incoming command
boolean commandReceived = false; // whether the command has been received in full
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// main loop
handleCommand();
}
void serialEvent(){
while (Serial.available()) {
// all we do is construct the incoming command to be handled in the main loop
// get the incoming byte from the serial stream
char incomingByte = (char)Serial.read();
if (incomingByte == '!')
{
// marks the end of a command
commandReceived = true;
return;
}
else if (incomingByte == '@')
{
// marks the start of a new command
command = "";
commandReceived = false;
return;
}
else
{
command += incomingByte;
return;
}
}
}
void handleCommand() {
if (!commandReceived) return; // no command to handle
// variables to hold the command id and the command data
int id;
int data[9];
// NOT SURE WHAT TO DO HERE!!
// flag that we've handled the command
commandReceived = false;
}
說我的電腦發送的Arduino的字符串。我的草圖以String變量(稱爲command
)結束,其中包含「20,2000,5」,並且commandRecieved
布爾變量設置爲True,因此調用handleCommand()
函數。
我想什麼在(目前無用)做handleCommand()
功能是分配20到被叫id
和2000和5至被叫data
整數數組變量,即:
data[0] = 2000
,data[1] = 5
等我已經閱讀了關於strtok()
和atoi()
,但坦率地說,我只是無法擺脫他們和指針的概念。我相信我的Arduino草圖也可以進行優化。
這兩個都是做這個的好方法。你也可以嘗試sscanf,如果它是可用的 – Gir 2012-08-11 15:33:01
你能提供任何示例代碼?我在上圖中努力想出C代碼。我真的不知道如何使用我提到的兩種方法... – Garry 2012-08-11 15:38:29