Проблемы с часами на DS1307

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

  1. Тимон

    Тимон Нуб

    Проблема вот в чем: нашёл библиотеку для ds1307, формат отображения времени(01:01:01) и даты(01.01.2015) то что я искал. Но после секунд отображаются левые символы, это ерунда я их затирал, а вот с дисплеем I2C(A4, A5) часы работать не хотят, я их перенёс на А2, А3. На другой библиотеке всё работает на А4, А5 (arduino uno r3), но формат 1:1:1. Прикрепляю архив.

    Код (Text):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <DS1307.h>

    // Init the DS1307
    DS1307 rtc(A2, A3);

    LiquidCrystal_I2C lcd(0x27,16,2);

    void setup()
    {
    lcd.init();
    lcd.clear();
    lcd.backlight();
    }

    void loop()
    {
    lcd.setCursor(4, 0);
    lcd.println(rtc.getTimeStr());
    lcd.setCursor(3, 1);
    lcd.print(rtc.getDateStr());
    }
     

    Вложения:

    • Часы.zip
      Размер файла:
      104,3 КБ
      Просмотров:
      315
  2. Тимон

    Тимон Нуб

    Как всё посадить на А4 и А5???
     
  3. Salk

    Salk Гик

    Используйте библиотеку "RTClib.h".
    PHP:
    #include <Wire.h>                // I2C
    #include <LiquidCrystal_I2C.h>  // LCD
    #include "RTClib.h"              // RTC - часы реального времени

    void setup()
    {
    rtc.begin(); // RTC
    // настройка даты/календаря часов
    rtc.adjust(DateTime(2015, 5, 29, 13, 55, 0)); // January 21, 2014 at 3am you would call
    }
    А так же на i2c линию поставьте подтягивающие резисторы 4.7 кОм к +5 В.

    Правда форматы даты в этой библиотеке будет "1.1.2015", т.е. если число меньше 10, то нолик она не рисует.
    Но это легко исправить, простым условием:
    PHP:
    if (now.minute() < 10) // Если меньше 10 минут, то рисуем "0" перед минутами
      {
        lcd.print("0");
      }
      lcd.print(now.minute(), DEC); // Минуты
     

    Вложения:

    • RTClib.zip
      Размер файла:
      8,5 КБ
      Просмотров:
      425
  4. Тимон

    Тимон Нуб

    Большое спасибо! Буду пробовать, библиотека такая есть(одна из 3), вполне удачная, у каждой разные команды. В библиотеке с 01.01 похожее условие прописано внутри.
     
  5. Тимон

    Тимон Нуб

    PHP:
    void loop()
    {
      lcd.setCursor(4, 0);
      if (RTC.get(DS1307_HR,true) < 10) // Если меньше 10, то рисуем "0" перед
      {
        lcd.print("0");
      }
      lcd.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
      lcd.print(":");
      if (RTC.get(DS1307_MIN,false) < 10) // Если меньше 10, то рисуем "0" перед минутами
      {
        lcd.print("0");
      }
      lcd.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
      lcd.print(":");
      if (RTC.get(DS1307_SEC,false) < 10) // Если меньше 10, то рисуем "0" перед
      {
        lcd.print("0");
      }
    Всё получилось, написал както так!
     
  6. DrProg

    DrProg Вечный нерд

    Библиотека от Далласа хуже?
     
  7. Максим B

    Максим B Гуру

    У Далласа есть библиотека???
     
  8. DrProg

    DrProg Вечный нерд

    Прошу прощения, перепутал с DS18B20.