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

Тема в разделе "Arduino & Shields", создана пользователем Arnoobino, 9 июл 2017.

  1. Arnoobino

    Arnoobino Нерд

    Друзья, хочу сделать небольшие часы с оповещением в пол часа и в час ровно.
    Используется Arduino Nano, lcd 1602 и модуль реального времени/
    Столкнулся с проблемой сравнения результата выдачи часов.
    Дополнительных переменных плодить не хочу, а в if разделе сравнение объектов происходит непонятно.
    Код (C++):
    if(time.gettime("i:s") == "00:00" || time.gettime("i:s") == "30:00"){
    halfAnHour();
    }

    void halfAnHour(){
      for(int i = 0; i < 15; i++){
        lcd.setCursor(i,0);
        lcd.write(0);
        lcd.setCursor(i,1);  
        lcd.write(0);
        delay(100);
      }
      lcd.clear();
    }
    Проверил в serial, там выводится 00:00, но arduino не принимает это как верный результат.
    Длинна строки вроде бы 5 символов - String(time.gettime("i:s")).length() = 5
    ЧЯДНТ?
     
    Последнее редактирование: 9 июл 2017
  2. Arnoobino

    Arnoobino Нерд

    Отвечу сам. Решилось преобразованием в строку результата часов.
    Код (C++):
    if(String(time.gettime("i:s")) == "00:00" || String(time.gettime("i:s")) == "30:00")
     
  3. Unixon

    Unixon Оракул Модератор

    Почему вам так нужно сравнивать время именно в виде строки? Почему бы не сравнивать исходные числа?
     
  4. mcureenab

    mcureenab Гуру

    Кто бы мог подумать, что вы используете эту библиотеку? http://iarduino.ru/file/235.html
     
  5. mcureenab

    mcureenab Гуру

    Функция time.gettime("i:s") возвращает char * на внутренний буфер.

    Применительно к указателям оператор == сравнивает собственно указатели а не строки.
    Для сравнения строк нужно использовать функцию strcmp.
     
    Arnoobino нравится это.
  6. Arnoobino

    Arnoobino Нерд

    Дело не в необходимости, а в умениях )) Смог догадаться только до этого ) В расчёт бралась исключительно простота - искомое время определяется одной константой.

    Большое спасибо за информацию! Буду копать там.
     
  7. Unixon

    Unixon Оракул Модератор

    Старайтесь избегать такого решения, это неэффективно по времени и по памяти, да и строковое представление зависит от формата.
     
  8. mcureenab

    mcureenab Гуру

    Эта функция time.gettime("i:s") из кучи память выделяет и держит. Решение так себе. Не для 2kB.