библиотека ds1307new ???

Тема в разделе "Arduino & Shields", создана пользователем Djvan, 11 май 2014.

  1. Djvan

    Djvan Нерд

    Товарищи, есть фрагмент кода для работы с часами ds1307 - мне нужно СРАВНИВАТЬ данные из RTC.hour с числом. Я так понимаю, что в RTC.hour хранятся данные в формате строки? Соответственно я не могу эти данные сравнивать с числом. В результате все время идет выполнение блока else - и вывода на экран нуля (соответственно реле не срабатывает). Как можно решить эту проблему?

    Код (Text):
     {
      RTC.getTime();
      float chas = RTC.hour;
    }

    if (chas > 10)  // если время больше времени включения  включаем реле
      {
        digitalWrite(7, LOW);
        lcd.setCursor(14, 0);          
      lcd.print("1");
        }        
        else
        { digitalWrite(7, HIGH);
          lcd.setCursor(14, 0);          
      lcd.print("0");
      }
     
  2. Mitrandir

    Mitrandir Гуру

    если они в виде строки, то зачем вы присваиваете строку флоату?
     
  3. CryNET

    CryNET Гик

    Я думаю, можно отобразить через Serial.print(); эту строку RTC.hour, тогда вы поймете что там есть, и что происходит. От этого и отталкиваться.
     
  4. geher

    geher Гуру

    Насколько я помню, hour в классе DS1307 имеет тип uint8_t. Соответственно, это число, которое можно сравнивать с числом.
    Возможно, модуль просто "не идет" по причине севшей батарейки в нем или он просто остановлен (на такую возможность намекает наличие StopClock в классе).
    Еще вариант - неправильное подключение модуля.
     
  5. Djvan

    Djvan Нерд

    Насчет строки это только предположение.

    Происходит там это : "19.00" - т.е. 19 часов на данный момент.... сравнивал и с 10 и с 10.00 и т.д. - все равно идет только ветка нет :(

    Модуль идет - время показывает в сериал. Подключен тоже правильно - визуально отображает и в сериал и на лсиди. Для отображения использую "..., DEC", или указываю количество знаков после запятой - 0....

    Посмотрел несколько примеров, действительно вроде как в формате uint8_t, но не могу понять как его сравнить :(
     
  6. Djvan

    Djvan Нерд

    все - вопрос снят - все оказалось намного проще - если не использовать флоат, а сравнивать непосредственно if (RTC.hour > 10) - то все отлично работает.. Просто мне надо быть внимательней, при изучении примеров :) Всем спасибо за участие...
     
  7. Mitrandir

    Mitrandir Гуру

    оппа а вот это интересно.. почему он uint8 к флоату не смог нормально привести?
     
  8. geher

    geher Гуру

    Только сейчас заметил.
    До и после
    float chas = RTC.hour;
    идут соответственно открывающая и закрывающая фигурные скобки, что ограничивает видимость переменной chas и ее присвоенного значения этими скобками.

    А это намекает на то, что где-то выше тоже объявлена переменная chas, иначе бы код просто не компилировался. А эта переменная где-то имеет какое-то свое собственное значение, никак не связанное с тем, что присваивается из RTC.hour, и сравнение происходит с этим неизвестным значением.
     
    Mitrandir нравится это.
  9. Djvan

    Djvan Нерд

    А вот это уже очень интересно - что то с этими фигурными скобками я намудрил по полной - получается, что если я тут задал флагу (chas) - значение например 0, а потом закрыл скобки - то дальнейшие операции будут видеть только первоначальные значения chas???

    Или я чтото туплю не по детски. Надо наверно на завтра все отложить - на свежую голову...
     
  10. geher

    geher Гуру

    Все просто. Два примера
    Код (Text):
    int x=1; // внешняя x
    {
      int x=2; // объявлена новая внутренняя переменная x,
                   //которой присвоено значение 2
    }
    // переменная внутри скобок прекратила свое
    // существование, действует внешняя.
    x++; //Внешняя x увеличилась на 1
    // Значение x равно 2
     
    Код (Text):
    int x=1; // внешняя x
    {
      x=2; // внутренней x не объявлено,
              //внешняя x получает значение 2;
    }
    x++; //Измененная внешняя x увеличилась на 1
    // Значение x равно 3
     
    Как говорится, найдите десять отличий.
     
    Djvan нравится это.
  11. Mitrandir

    Mitrandir Гуру

    переменная существует только внутри границ окруженных фигурными скобками.
     
    Djvan нравится это.
  12. Megakoteyka

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

    Это называется область видимости.
     
    Djvan и CryNET нравится это.
  13. Djvan

    Djvan Нерд

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