У меня проблема. Поверьте мне, я начал использовать эту функцию strtok() в 1 или 2AM. и сейчас 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);
}
РЕЗУЛЬТАТЫ: когда я ввожу: "синее ~ lalalalal ~ kakakakaekkewew", он выводит: синяя lalalalal kawawawawewew blue выбрана
когда я ввожу: "красный ~ 123 ~ 321 он выдает: красный
красный выбран
когда я ввожу: "зеленый ~ 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);
}
}
inData[index] = 0;
после того, как он заканчивается, пожалуйста. Это, предполагая, чтоindex
фактически инициализируется в0
в начале.