Проверка входной строки последовательной связи 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;
}
}
}
@earl galope, 👍0
Обсуждение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
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Как напечатать несколько номеров через Serial с очень небольшим количеством строк кода?
- Акцептант векселей ИКТ
- Проблема с массивом + последовательным монитором
- Arduino wrap или подкласс print() для работы с несколькими Serial
- Матричный дисплей с Arduino UNO (ПРОБЛЕМА)
- CC3000 Wi-Fi: включить отладку
не могли бы вы, пожалуйста, изменить изображение на фактический текст для кода? Спасибо., @Overdrivr