Проверка входной строки последовательной связи Arduino

Я пытаюсь проверить, находится ли входная строка в моем serial внутри моего массива строк, но похоже, что условие if(array[i]==inputString) не выводит true .

Итак, вот мой код:

String array[4]={"hey","jude","jane"},inputString,test;
boolean stringComplete=false;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  //int store=0;
  serialEvent();
  if(stringComplete){
    Serial.println(inputString);
    for(int i=0;i<4;i++){
      Serial.println("..");
      //test=array[i];
      Serial.println(array[i]);
      if(inputString==array[i]){
        Serial.println("true");
        break;
      }
    }
  inputString="";
  stringComplete=false;
  }
   //Serial.println(store);
}

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

, 👍0

Обсуждение

не могли бы вы, пожалуйста, изменить изображение на фактический текст для кода? Спасибо., @Overdrivr


1 ответ


1

Сначала вы объявляете массив из 4 элементов и предоставляете инициализатор для 3. Не знаю, как он вообще может компилироваться, может быть, это допустимо, но вызывает сомнения

String [] array = {"hey","jude","jane","foo"}; 

Кроме того, ваша функция serialEvent добавляет \n к строке. Даже если вы получите строку jane, вы будете сравнивать jane из массива с jane\n из serial

char inChar = (char)Serial.read();
if( inChar == '\n')
   stringComplete = true;
else
   inputString += inChar
,

Нет причин сомневаться, просто посмотрите его. См. параграф 19 (предложение “все подобъекты, которые не инициализированы явно, должны быть инициализированы неявно так же, как объекты со статической продолжительностью хранения”) в части 6.7.9 стандарта ISO / IEC N1570 C ++. 4-й элемент String array [4] будет инициализирован нулевым указателем, если появятся только три инициализатора., @James Waldby - jwpat7

Спасибо за информацию, но даже с этим предложением мне это не совсем понятно. 4-й элемент будет инициализирован в nullpointer или String с пустым конструктором?, @Overdrivr

Пустая строка (т.е. Строка с конструктором по умолчанию)., @Nick Gammon

После комментария мне пришло в голову, что "нулевой указатель" может быть неверным для объектов "String", но я не знал этого сразу., @James Waldby - jwpat7

Строковый объект не является указателем, поэтому он не может содержать нулевой указатель как таковой., @Nick Gammon