orologio con display tft 3,5"

Buongiorno a tutti, sono un nuovo iscritto e chiedo cortesemente una soluzione a questo problema:
uso un modulo rtc ds3231 e un display ili9486 inizializzando il modulo rtc mi da un messaggio di errore

exit status 1
no matching function for call to 'RTC_Millis::begin()'

ma togliendo il begin il programma funziona correttamente, ma il tempo dell'rtc pur avendo la pila riparte sempre da capo togliendo l'alimentazione.

Spero che qualcuno mi aiuti grazie , vi allego il mio file.

display_data_e_ora_.ino.ino.ino (1.57 KB)

Magari con un po' di informazioni di più è meglio ...

  1. CHE modulo RTC (link ... così vediamo la breakout board)

  2. CHE libreria stai usando (link ... così possiamo esaminarla)

Guglielmo

Scusami è un RTC DS3231 AT24C32 e uso la libreria RTClib.h , MCUFRIEND_kbv.h (per il display) entrambe scaricate dalla gestione librerie di Arduino.

Perchè usi RTC_Millis se hai un RTC vero ?

Se usi RTC_Millis, la begin VUOLE un parametro in più, ovvero data e ora da cui partire

RTC_Millis rtc;
...
DateTime dt(2020,8,20,14,30,0);
rtc.begin(dt);

Visto che hai un RTC specifico, usa RTC_DS3231:

RTC_DS3231 rtc;
...
rtc.begin();

Hai aggiornato all'ultima versione la libreria di Adafruit ? Hai provato a compilare il loro esempio ds3231.ino ?

Guglielmo

P.S.: Sovrapposto con Nid ... :smiley:
Prova l'esempio e, se va bene, parti da quello per il tuo programma.

ciao nid69ita ho provato precedentemente con questa soluzione , ma sul display non compare niente , rimane tutto bianco

giadp:
ciao nid69ita ho provato precedentemente con questa soluzione , ma sul display non compare niente , rimane tutto bianco

... quello è però un altro problema che NON ha nulla a che vedere con il RTC ... ::slight_smile:

Separa i problemi ... per prima cosa fai funzionare l'RTC e manda i valori sul monitor seriale, così sei sicuro che funziona, DOPO integri il display.

Guglielmo

Sono più che d'accordo con Guglielmo.
Fai le cose una alla volta. Prova un esempio della libreria RTC, uno semplice che manda i dati su monitor seriale.
Poi un altro sketch per provare SOLO il display, mandando sul display solo un contatore con un delay(2000) ogni 2 secondi.
Quando sai usare il display e l'RTC, solo allora metti insieme le due cose.

il modulo rtc sul monitor seriale funziona benissimo usando la libreria di Adafruit , anche il display con un esempio di graphictest della libreria MCUFRIEND_kbv.h funziona molto bene.

In quello che hai postato usi la RTClib.h che non è di Adafruit.
Quindi ? Ora che usi una lib diversa mischiata al display è un problema di display o di libreria ?
Capisci che se non provi una cosa alla volta non ne esci ?
Perchè quindi, se il RTC funziona con altra lib, non usi quella ? E perchè usi della lib RTC_Millis che non richiede il RTC fisico ?

RTC con lib RTClib.h l'hai provata da sola senza display ? Con uno degli esempi della libreria ?

Infatti io all'inizio avevo detto che usavo la lib RTClib.h e non quella di Adafruit, poi mi avete consigliato di fare la prova con quest'ultima senza il display e l'RTC funziona molto bene. Ora ho provato a mettere insieme la lib Adafruit con quella del display (MCUFRIEND_kbv.h) e il problema del display persiste (fa un primo lampeggio giallo ovvero il colore di sfondo e subito la schermata bianca).

Comunque ho provato anche un esempio della libreria RTClib.h senza display e funziona bene, mi viene quindi da pensare che la MCUFRIEND va in conflitto con le altre.

facendo delle prove ho notato che mettendo un Delay prima di chiudere il void setup lo schermo funziona senza però visualizzare ora e data. quando poi passano i secondi (del Delay) lo schermo ritorna a essere bianco. spero che questa prova possa essere d'aiuto, grazie.

giadp:
Infatti io all'inizio avevo detto che usavo la lib RTClib.h e non quella di Adafruit ...

Questo perché, come sempre, NON rispondete a tono alle domande ma date solo indicazioni ...

... io ti ho chiesto il LINK alla libreria, tu hai risposto che usavi la RTClib installata dal "library manager", peccato che, di librerie per RTC, nel library manager, ce ne siano parecchie e che, una di esse sia:


... RTClib di Adafruit :smiling_imp: ... che ne so io che ne usi un'altra ?

Guglielmo

  1. Fai foto di cosa visualizzi prima che diventa bianco, posta il codice che usi adesso.

  2. Quale esempio del lcd hai provato?
    La lib del lcd è questa che viene scaricata: GitHub - prenticedavid/MCUFRIEND_kbv: MCUFRIEND_kbv Library for Uno 2.4, 2.8, 3.5, 3.6, 3.95 inch mcufriend Shields

  3. Quale esempio del rtc hai provato ?

nella prima foto viene visualizzato solo lo sfondo con i riquadri per il delay stabilito

#define PINK 0xF81F
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GREY    0x4208 
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <Arduino.h>
#include <Wire.h>         
#include"RTClib.h"
RTC_DS3231 rtc;
//RTC_Millis rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup(void) {
  Serial.begin(9600);
  rtc.begin();
  rtc.adjust(DateTime (F(__DATE__),F(__TIME__)));
  tft.reset();
  uint16_t identifier = tft.readID();
  identifier=0x9486;
  tft.begin(identifier);
  tft.setRotation(1);
  tft.fillScreen(YELLOW); 
  tft.setCursor(30, 40); 
  tft.drawLine(185,317,185, 1,BLUE); 
  tft.drawLine(1,97,185, 97,BLUE);  
 delay(1000);
}

void loop(void) {
  delay(9000);
  DateTime now = rtc.now();
  unsigned long start = micros();
    tft.setCursor(5,8); 
    tft.setTextColor(BLUE); 
    tft.setTextSize(3);
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    tft.print(daysOfTheWeek[now.dayOfTheWeek()]);
    tft.setCursor(5,40); 
    tft.setTextColor(BLUE); 
    tft.setTextSize(3);
    tft.print(now.day(), DEC);
    tft.print('/');
    tft.print(now.month(), DEC);
    tft.print('/');
    tft.print(now.year(), DEC);
    tft.print(' ');
    tft.setCursor(5,73); 
    tft.setTextColor(BLUE);
    tft.setTextSize(3);
    tft.print(now.hour(), DEC);
    tft.print(':');
    tft.print(now.minute(), DEC);
    tft.println();
    delay(60000);
    tft.fillRect(1,1, 183, 95, YELLOW); //aggiorna diplay ogni minuto
  }

nella seconda foto invece ho utilizzato il codice che avevo postato all'inizio in cui compare tutto ma c'era il problema del tempo che non scorre se tolta l'alimentazione.

ho utilizzato le librerie scaricate dal library manager : MCUFRIEND_kbv by David Prentice utilizzando l'esempio graphictest_kbv. per l'rtc invece ho utilizzato RTClib.h by Adafruit e come esempio DS3231. in entrambi i casi vanno bene provati singolarmente

foto 1 IMG_0125.JPG - Google Drive
foto 2 IMG_6370.JPG - Google Drive

giadp:
nella seconda foto invece ho utilizzato il codice che avevo postato all'inizio in cui compare tutto ma c'era il problema del tempo che non scorre se tolta l'alimentazione.

Ora il problema è chiaro. Posti un codice all'inizio con errore di compilazione, se togli parti della lib RTC non va rtc. Ora che tutto funziona, si capisce il vero tuo problema.
Ovvero NON puoi lasciare
rtc.adjust(DateTime (F(DATE),F(TIME)));
nel codice della setup. Quando compri un RTC non è impostato, quella riga serve solo 1 volta. Poi è da ricompilare/uploader senza quella riga. Molto semplice. Ovviamente se lasci quella riga OGNI volta che spegni riesegue la setup rimettendo data/ora di quando hai compilato.

Quindi dovrei caricare la prima volta il codice con la rtc.adjust e successivamente senza?
Facendo così rimane sempre il problema del display che fa un lampeggio inziale giallo e successivamente ritorna bianco
( togliendo il delay)