#1 2016-12-05 18:16:22

one_player
Учасник
Зареєстрований: 2016-10-06
Повідомлень: 12

SD сравнение строк

Есть такой код

#include <SD.h>
#include <SPI.h>
File printFile;
String bufs;
String buf = "14";
boolean SDfound;
void setup() {
  Serial.begin(9600);
  if (SDfound == 0) {
    if (!SD.begin(8)) {
      Serial.print("SD not found");
      while(1);
    }
  }
}
void loop() {
  SDfound = 1;
  printFile = SD.open("id.txt");

  if (!printFile) {
    Serial.print("file cannot be opened");
    while(1);
  }
  while (printFile.available()) {
    bufs = printFile.readStringUntil('\n');
    Serial.println(bufs); //Вывод строки
    if (bufs == buf)// Если Строка bufs == переменной buf то выводим Yes!
    {
      Serial.println("Yes!");
    }
    delay(2000);      
  }
  printFile.close();
  delay(2000);
}

Файл id.txt на SD карте содержит цифры от 1 до 20 каждая цифра с новой строки.
Приведенный код работает отлично в сериал передает все эти цифры как и хотелось.
Но вот кусок

 if (bufs == buf)// Если Строка bufs == переменной buf то выводим Yes!
    {
      Serial.println("Yes!");
    }

По какой то причинен НЕ проверяет равенство этих строк.
Почему? Где ошибка? Как ее исправить? Помогите пж.

Остання редакція one_player (2016-12-05 18:17:29)

Неактивний

#2 2016-12-06 12:50:36

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: SD сравнение строк

Я конечно извиняюсь за глупый вопрос, в файле у Вас цифры в кавычках?

Неактивний

#3 2016-12-06 14:42:14

one_player
Учасник
Зареєстрований: 2016-10-06
Повідомлень: 12

Re: SD сравнение строк

Нет

Неактивний

#4 2016-12-06 14:43:38

one_player
Учасник
Зареєстрований: 2016-10-06
Повідомлень: 12

Re: SD сравнение строк

И так. Заменил.

if (bufs == buf)// Если Строка bufs == переменной buf то выводим Yes!
    {
      Serial.println("Yes!");
    }

На такой костыль.

bufs.trim();
    if (bufs.compareTo(buf)== 0)
    {
      Serial.println("Ok");
      break;
    } 

Функция trim() удаляет лишние пробелы в конце переменной String.
После функцией сравнения переменных типа String compareTo() которая в случае совпадения по алфавитно содержимого этих переменных возвращает "0" проверяю свои переменные.
Возможно все это костыль, возможно можно было и проще сделать.

Неактивний

#5 2016-12-06 22:16:23

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: SD сравнение строк

Я бы попытался  заменить строку:
bufs = printFile.readStringUntil('\n');
на
bufs = (String) printFile.readStringUntil('\n');
wink

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму