Конфликт библиотек DS1307 и LiquidCrystal_I2C
- Войдите на сайт для отправки комментариев
Сб, 31/01/2015 - 12:57
Имеется простенький скетч для часов RTC.
#include <Wire.h>
#include <DS1307.h>
// Init the DS1307
DS1307 rtc(A4, A5);
Time t;
void setup()
{
Serial.begin(9600);
}
void loop()
{
t = rtc.getTime();
Serial.print(t.hour); //read the hour
Serial.print(":");
Serial.print(t.min);//read minutes
Serial.print(":");
Serial.print(t.sec);//read seconds
Serial.print(" ");
Serial.print(t.date);//read date
Serial.print("/");
Serial.print(t.mon);//read month
Serial.print("/");
Serial.print(t.year); //read year
Serial.println();
delay(1000);
}
В порядке эксперимента решил serial заменить на LCD 1602 с подключением по I2C.
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal_I2C.h>
DS1307 rtc(A4, A5); // Init the DS1307
Time t;
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея.
void setup()
{
Serial.begin(9600);
}
void loop()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
t = rtc.getTime();
lcd.print(t.hour); //read the hour
lcd.print(":");
lcd.print(t.min); //read minutes
lcd.print(":");
lcd.print(t.sec); //read seconds
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(t.date); //read date
lcd.print("/");
lcd.print(t.mon); //read month
lcd.print("/");
lcd.print(t.year); //read year
lcd.println();
delay(1000);
}
при компиляции выдаёт:
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::expanderWrite(uint8_t)':
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp:261: error: 'class TwoWire' has no member named 'write'
Библиотека часов нестандартная, но и со стандартными та же фигня...
IDE поменяйте. Или библиотеку.
ide 105. RTC и LiquidCrystal_I2C пробовал разные...
Попробуйте на 0023. А по нормальному посмотрите здесь на форуме как этот косяк исправить. Он появился после 1.0
Скомпилировалось. Но на дисплее теперь вместо времени символы "U" и год 2165...
Скомпилировалось. Но на дисплее теперь вместо времени символы "U" и год 2165...
Я не знаю, что у вас за библиотека, но часы должны быть инициированы и запущены. В вавшем коде этих операций не видно. А кстати с первым кодом часы шли?
Часы шли и идут с любым кодом. Заливал другие варианты скетчей часов с другими библиотеками (RTClib.h) - нормуль. В аквакотроллере работает именно эта библиотека, но там нет wire.h.
К сожалению выяснил, что эта библиотека не будет работать с wire.h (Вот здесь её описание http://nnm.me/blogs/pencraft/arduino-i-chasy-na-mikrosheme-dallas-ds1307/ )
Так подключите часы как они должны быть включены от рождения - по протоколу I2C, а не извращайтесь с непонятными библиотеками. Там даже их включение рекомендовано на цифровые пины. Что в итоге ждать от этой связки, ток автор библиотеки знает.
И попробуйте переключить на цифровые пины, как рекомендовано в описании. Возможно поможет. Сейчас у вас фактически по одной шине пытаются идти два разных протокола (програмный и аппаратный) естественно будет конфликт.
Уже переделал на другую библиотеку
сделайте инициализацию и подсветку в setup.И где-то на форуме писали про задержку при инициализации. ИМХО. Не проверял
Скомпилировалось. Но на дисплее теперь вместо времени символы "U" и год 2165...
там же в комментах к библиотеке часов сказано, что если неправильно пины сконфигурировать, может возникнуть пространственно-временное искажение и нельзя рядом находиться т.к. можно временно в будущее попасть )))
Скомпилировалось. Но на дисплее теперь вместо времени символы "U" и год 2165...
там же в комментах к библиотеке часов сказано, что если неправильно пины сконфигурировать, может возникнуть пространственно-временное искажение и нельзя рядом находиться т.к. можно временно в будущее попасть )))
Ну зачем же мне чужие слова приписывать?)))
Переделал на другую библиотеку - молодец! Написать как решил проблему сложно что ли? Печаль...
C данной библиотекой проблема не решается. Решение я озвучил - переписал под другиую либу.
Да я не настаиваю. Если человек не понимает как работают сообщества, то что уж тут поделать. Только надеяться что со временем все будет.