strtok не работает хорошо

0

У меня проблема. Поверьте мне, я начал использовать эту функцию 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" он выводит зеленый

зеленый выбран

  • 0
    Ваша операция последовательного чтения никогда не завершает буфер после разрывов цикла. Положить inData[index] = 0; после того, как он заканчивается, пожалуйста. Это, предполагая, что index фактически инициализируется в 0 в начале.
  • 0
    Правильный отступ очень поможет читабельности. Особенно с этим большим количеством кода.
Показать ещё 4 комментария
Теги:
arduino

1 ответ

0

так я решил проблему. изменил способ получения данных.

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);
}

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню