我有个问题。相信我,我从凌晨1点或2点开始使用此strtok()函数。现在是凌晨4:22。 >。<
问题是这样的:
1.当我输入“蓝色”时,这三个标记就可以了。
2.当我输入“红色”或“绿色”时,这三个标记为NULL :(。
const char s[2] = "~"; //for cutting;
char inData[100]; // Allocate some space for the string
char *token;
char *token2;
char *token3;
char x1[100];
char x2[100];
char x3[100];
char Comp(char* This) {
while (Serial.available() > 0) // Don't read unless
// there you know there is data
{
if(index < 99) // One less than the size of the array
{
inChar = Serial.read(); // Read a character
inData[index] = inChar; // Store it
index++; // Increment where to write next
// inData[index] = '\0'; // Null terminate the string
}
}
token = strtok(inData, s);
strcpy(x1,token);
token2 = strtok(NULL, s);
strcpy(x2,token2);
token3 = strtok(NULL, s);
strcpy(x3,token3);
if (strcmp(x1,This) == 0) {
Serial.println(x1);
Serial.println(x2);
Serial.println(x3);
for (int i=0;i<99;i++) {
inData[i]=0;
}
index=0;
return(0);
}
else {
return(1);
}
}
我如何称呼Comp的功能:
if(Comp("blue")==0){
Serial.println("BLUE SELECTED");
analogWrite(9, 0);
analogWrite(10,255);
analogWrite(11,255);
}
if(Comp("green")==0){
Serial.println("GREEN SELECTED");
analogWrite(10,0);
analogWrite(11,255);
analogWrite(9,255);
}
if(Comp("red")==0){
Serial.println("RED SELECTED");
analogWrite(10,255);
analogWrite(11,0);
analogWrite(9,255);
}
输出:
当我输入:“ blue〜lalalalal〜kakakakaekkewew”
它输出:
蓝色
拉拉拉尔
kawawawawewew
蓝色选择
当我输入:“ red〜123〜321
它输出:
红色
红色选择
当我输入:“ green〜123〜321”
它输出
绿色
绿色选中
最佳答案
这就是我解决错误的方法。
改变了我接收数据的方式。
char Comp(char* This) {
while(Serial.available()) {
inChar = Serial.read();
inData.concat(inChar);
}
strcpy(inData2, inData.c_str());
token = strtok(inData2, s);
strcpy(x1,token);
token = strtok(NULL, s);
strcpy(x2,token);
token = strtok(NULL, s);
strcpy(x3,token);
if (strcmp(x1,This) == 0) {
Serial.println(x1);
Serial.println(x2);
Serial.println(x3);
inData = "";
inChar = '\0';
return(0);
}
else {
return(1);
}
}