Здравствуйте.
В общем решил я научиться Ардуине и для начала создал небольшой проект в котором фигурирует модуль часов RTC_DS1307 и дисплей ST7789 240x240 IPS. Разобрался с кодом, все работало, думаю: “Пора в корпус собирать” - и рас, а не работает.
Я ничего не менял, а часы просто наотрез отказываются работать совместно с дисплеем. Я пробовал менять пины, модули и контроллеры, но проблема не уходит.
Сама суть проблемы в том, что:
-если я запускаю код ниже в неизменном виде - работает дисплей, выводится
“REAL TIME” и ничего более. Дата и время даже по нулям на дисплее не появляется, а в мониторе порта, раз в секунду, высвечивается
“00-00-2000 00 00 00”
-если же я закоментирую строчку кода номер 41 “lcd.init(SCR_WD, SCR_HT);”, то по понятным причинам дисплей не работает, но работают часы и корректно выводят в монитор порта установленные дату и время.
Я уже что только не пробовал, чтобы это исправить. У кого была такая проблема, поделитесь решением.
PS: Извините, я не очень грамотный
/*
ST7789 240x240 IPS
GND -> GND
VCC -> VCC
SCL -> D13
SDA -> D11
RES -> D8 or any digital
DC -> D7 or any digital
BLK -> D6
-----------------------------
RTC_DS1307
VCC и GND соответственно
pin_SW_SDA -> 10
pin_SW_SCL -> 12
*/
/*
Задаются библиотеки и константы
*/
#define pin_SW_SDA 10
#define pin_SW_SCL 12
#include <iarduino_RTC.h>
iarduino_RTC watch(RTC_DS1307);
#define COMPATIBILITY_MODE
#define CS_ALWAYS_LOW
#define TFT_DC 7
#define TFT_RST 8
#define SCR_WD 240
#define SCR_HT 240
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Arduino_ST7789_Fast.h>
Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST);
void setup(void)
{
/*Код дисплея*/
lcd.init(SCR_WD, SCR_HT);
lcd.fillScreen(BLUE);
lcd.setCursor(0, 0);
lcd.setTextColor(WHITE, BLUE);
lcd.setTextSize(3);
lcd.println("REAL TIME");
lcd.println();
/*Код часов*/
delay(300);
Serial.begin(9600);
watch.begin();
watch.settime(00, 04, 00, 21, 11, 22, 2);
}
void loop()
{
/*Здесь реальные или заданные
дата и время выводятся на дисплей и в монитор порта*/
if(millis()%1000==0)
{
lcd.println(watch.gettime("d-m-Y"));
lcd.println();
lcd.print(watch.gettime("H")); lcd.println(" h");
lcd.print(watch.gettime("i")); lcd.println(" m");
lcd.print(watch.gettime("s")); lcd.println(" s");
Serial.println(watch.gettime("d-m-Y H i s"));
lcd.setCursor(0, 0);
lcd.println();
lcd.println();
delay(1);
}
}
Эти часы не имеют никакого отношения к этому дисплею, они никак не пересекаются. Отказываются они работать не с дисплеем, а с Вашим кодом и Вашей схемой. Если Вы опубликуете схему и дадите ссылки на библиотеки, то можно будет посмотреть.
Я Вас просил ссылки на библиотеки (не какие-то с такими же названиями), а именно Ваши. Поскольку пока это выглядит как бред. В той версии, что у меня никакие пины для часов не задаются - она работает со стандартными.
тут нарисовался гораздо раньше, а именно со строки №24. Библиотеки хуже я ещё не видел. Вы видели как в этой библиотеке реализована функция gettime, которой ТС активно пользуется? Особенно доставляет, когда люди не сразу печатают (как ТС), а сначала делают несколько вызовов gettime, а потом пытаются все результаты напечатать одним махом. Во веселье!
@Yogurt
подвожу небольшие итоги:
В первую очередь вам надо разобраться подключениями
переключить часы на аппаратную шину I2c и лучше вообще сменить библиотеку
проверить подключение дисплея. Вы используете библиотеку для дисплея, которая работает по аппаратному SPI. При этом на схеме у вас дисплей подключен явно не к SPI-пинам. Я не понимаю, как он могу у вас работать (как вы утверждаете)
Мож там чего поменялось, типа новые версии. Я ведь не зря ТС попросил ссылки на библиотеки, только он плюёт на просьбу. В той версии, что у меня (а я смотрю текст, а не вики) ничего такого нет.