INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zeit vom Nextion Enhanced mit Arduino auslesen
05.03.2019, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2019 17:52 von Tommy56.)
Beitrag #41
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Wieso? Du musst natürlich wieder 1970 addieren, wenn Du daraus das Jahr anzeigen willst.

Mit Deinen Fragmenten kann man nichts genaues feststellen.
Baue doch mal nur einen Sketch, in dem die die bekannten Werte in die tm-Struktur rein hängst (also ohne den Nextion-Teil, von dem wissen wir ja, das er geht) und zeige, was der dann ausgibt.

Gruß Tommy

Ich hatte die Zeit nicht gesetzt, sondern nur umgewandelt. Sorry.
Code:
#include <TimeLib.h>

tmElements_t tm;
char puffer[100];
void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  tm.Year = 49;
  tm.Month = 3;
  tm.Day = 5;
  tm.Hour = 17;
  tm.Minute = 41;
  tm.Second = 12;
  setTime(makeTime(tm));  // <------------------ hier -------
  sprintf(puffer,"%02d.%02d.%04d %02d:%02d:%02d",day(),month(),year(),hour(),minute(),second());
  Serial.println(puffer);
}

void loop() {

}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2019, 18:29
Beitrag #42
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
(05.03.2019 17:27)Tommy56 schrieb:  setTime(makeTime™); // <------------------ hier -------
sprintf(puffer,"%02d.%02d.%04d %02d:%02d:%02d",day(),month(),year(),hour(),minute(),second());
Serial.println(puffer);

den Bereich habe ich einfach mal dazu gepackt. Das setTime hatte ich auch schon herausgefunden.

Code:
tm.Year = (nex_rtc0-1970);
          Serial.print("tm.Year=(nex_rtc0-1970) / tm.Year= ");
          Serial.println(tm.Year);
          tm.Month = nex_rtc1;
          Serial.print("tm.Month=nex_rtc1 / tm.Month= ");
          Serial.println(tm.Month);
          tm.Day = nex_rtc2;
          Serial.print("tm.Day=nex_rtc2 / tm.Day= ");
          Serial.println(tm.Day);
          tm.Hour = nex_rtc3;
          Serial.print("tm.Hour=nex_rtc3 / tm.Hour= ");
          Serial.println(tm.Hour);
          tm.Minute = nex_rtc4;
          Serial.print("tm.Minute=nex_rtc4 / tm.Minute= ");
          Serial.println(tm.Minute);
          tm.Second = nex_rtc5;
          Serial.print("tm.Second=nex_rtc5 / tm.Second= ");
          Serial.println(tm.Second);
          //setTime(nex_rtc3, nex_rtc4, nex_rtc5, nex_rtc2, nex_rtc1, nex_rtc0);
          setTime(makeTime(tm));  // <------------------ hier -------
          sprintf(pufer,"%02d.%02d.%04d %02d:%02d:%02d",day(),month(),year(),hour(),minute(),second());
          Serial.println(pufer);
Die Ausgabe von pufer ist richtig, aber nicht meine Uhrzeitausgabe.
Aber das day() etc. hinter sprintf ruft doch genau so die Uhrzeit aus der Time.lib ab wie ich mit DigitalClockDisplay.
Code:
18:07:36.394 -> ------------------RTC wurde abgefragt------------------
18:07:36.429 -> 5/3/2019   18:7:38
18:07:36.464 -> tm.Year=(nex_rtc0-1970) / tm.Year= 49
18:07:36.498 -> tm.Month=nex_rtc1 / tm.Month= 3
18:07:36.532 -> tm.Day=nex_rtc2 / tm.Day= 5
18:07:36.566 -> tm.Hour=nex_rtc3 / tm.Hour= 18
18:07:36.600 -> tm.Minute=nex_rtc4 / tm.Minute= 7
18:07:36.634 -> tm.Second=nex_rtc5 / tm.Second= 38
18:07:36.669 -> 05.03.2019 18:07:38
18:07:37.044 -> 0:47:06 1/1/1970  Unix Time:  2826

Irgendwie verliert er die Werte nach dem synchronisieren.
Da muss ich wohl mal auf die suche gehen.

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2019, 18:42
Beitrag #43
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Gib doch mal wieder den gesamten aktuellen Code.

Welche Zeile erzeugt die Ausgabe:
Code:
0:47:06 1/1/1970  Unix Time:  2826

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2019, 10:41
Beitrag #44
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
(05.03.2019 18:42)Tommy56 schrieb:  Gib doch mal wieder den gesamten aktuellen Code.
Hier mal der Code:
Code:
#include <TimeLib.h>

union  puffer
  {
    long l;
    byte arr[5];
  };

char pufer[100];
  
byte NexT[3] = {255,255,255}; // Abschluss fuer Serielle Kommunikation
byte inID[3];
byte b; // seriell empfangene bytes (GetZahl)
int nex_rtc0 = 0 , nex_rtc1 = 0 , nex_rtc2 = 0 , nex_rtc3 = 0 , nex_rtc4 = 0 , nex_rtc5 = 0;// Uhr und Datum vom Nextion geholt 0=JJJJ,1=MM,2=TT 3=HH,4=MIN,5=Sek
int art = 0; // Art der Seriell empfangenen Daten 1=Nummern , 2=ObjektID , 3=Slider , 4=Nextion Sleep , 5=Nextion WakeUp
int datenangefordert = 0;
const long UhrSyncInt = (1 * 30);  //alle x Stunden die Uhrzeit synchronisieren z.B. 6 Stunden (6 * 3600L)
static bool rtc0get = false;
static bool rtc1get = false;
static bool rtc2get = false;
static bool rtc3get = false;
static bool rtc4get = false;
static bool rtc5get = false;
static bool sleepmode = false;
static bool timesync = true;
unsigned long lastuhrMillis;
unsigned long lastuhrInterval = 10000;
tmElements_t tm;

void setup()
{
Serial.begin(9600);
Serial1.begin(115200);
Serial1.print("sleep=0");
Serial1.write(NexT,3);
delay(2000);
setSyncInterval(UhrSyncInt);  // z.B. 6 Stunden (6 * 3600L)
setSyncProvider(syncWithNextion);
}

void loop() {
  // put your main code here, to run repeatedly:
if (millis() - lastuhrMillis > lastuhrInterval)
    {
      digitalClockDisplay();
      lastuhrMillis = millis();
    }

}

void syncWithNextion()
{
     timesync = true;
     while (timesync)
     {
        if (!rtc0get)
          {
          if (datenangefordert == 0)
            {
            Serial1.print("get rtc0");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc0 = getZahl();
          if (nex_rtc0 != -1L)
            {
            Serial.print("nex_rtc0 = ");
            Serial.println(nex_rtc0);
            rtc0get = true;
            datenangefordert = 0;
            }
          }
        if ((!rtc1get) && (rtc0get))
          {
          if (datenangefordert == 0)
            {
            //Serial.println("get nex_rtc1");
            Serial1.print("get rtc1");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc1 = getZahl();
          if (nex_rtc1 != -1L)
            {
            Serial.print("nex_rtc1 = ");
            Serial.println(nex_rtc1);
            rtc1get = true;
            datenangefordert = 0;
            }
          }
        if ((!rtc2get) && (rtc1get))
          {          
          if (datenangefordert == 0)
            {
            //Serial.println("get nex_rtc2");
            Serial1.print("get rtc2");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc2 = getZahl();
          if (nex_rtc2 != -1L)
            {
            Serial.print("nex_rtc2 = ");
            Serial.println(nex_rtc2);
            rtc2get = true;
            datenangefordert = 0;
            }
          }
        if ((!rtc3get) && (rtc2get))
          {
          if (datenangefordert == 0)
            {
            Serial1.print("get rtc3");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc3 = getZahl();
          if (nex_rtc3 != -1L)
            {
            Serial.print("nex_rtc3 = ");
            Serial.println(nex_rtc3);
            rtc3get = true;
            datenangefordert = 0;
            }
          }
        if ((!rtc4get) && (rtc3get))
          {
          if (datenangefordert == 0)
            {
            Serial1.print("get rtc4");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc4 = getZahl();
          if (nex_rtc4 != -1L)
            {
            Serial.print("nex_rtc4 = ");
            Serial.println(nex_rtc4);
            rtc4get = true;
            datenangefordert = 0;
            }
          }
        if ((!rtc5get) && (rtc4get))
          {
          if (datenangefordert == 0)
            {
            Serial1.print("get rtc5");
            Serial1.write(NexT,3);
            datenangefordert = 1;
            }
          nex_rtc5 = getZahl();
          if (nex_rtc5 != -1L)
            {
            Serial.print("nex_rtc5 = ");
            Serial.println(nex_rtc5);
            datenangefordert = 0;
            rtc5get = true;
            Serial.println("------------------RTC wurde abgefragt------------------");
            Serial.print(nex_rtc2);
            Serial.print("/");
            Serial.print(nex_rtc1);
            Serial.print("/");
            Serial.print(nex_rtc0);
            Serial.print("   ");
            Serial.print(nex_rtc3);
            Serial.print(":");
            Serial.print(nex_rtc4);
            Serial.print(":");
            Serial.println(nex_rtc5);
            tm.Year = (nex_rtc0-1970);
            Serial.print("tm.Year=(nex_rtc0-1970) / tm.Year= ");
            Serial.println(tm.Year);
            tm.Month = nex_rtc1;
            Serial.print("tm.Month=nex_rtc1 / tm.Month= ");
            Serial.println(tm.Month);
            tm.Day = nex_rtc2;
            Serial.print("tm.Day=nex_rtc2 / tm.Day= ");
            Serial.println(tm.Day);
            tm.Hour = nex_rtc3;
            Serial.print("tm.Hour=nex_rtc3 / tm.Hour= ");
            Serial.println(tm.Hour);
            tm.Minute = nex_rtc4;
            Serial.print("tm.Minute=nex_rtc4 / tm.Minute= ");
            Serial.println(tm.Minute);
            tm.Second = nex_rtc5;
            Serial.print("tm.Second=nex_rtc5 / tm.Second= ");
            Serial.println(tm.Second);
            //setTime(nex_rtc3, nex_rtc4, nex_rtc5, nex_rtc2, nex_rtc1, nex_rtc0);
            setTime(makeTime(tm));  // <------------------ hier -------
            sprintf(pufer,"%02d.%02d.%04d %02d:%02d:%02d",day(),month(),year(),hour(),minute(),second());
            Serial.println(pufer);
            Serial.print(hour());
            Serial.print(":");
            Serial.print(minute());
            Serial.print(":");
            Serial.print(second());
            Serial.print(" ");
            Serial.print(day());
            Serial.print("/");
            Serial.print(month());
            Serial.print("/");
            Serial.println(year());
            Serial.print("now()= ");
            Serial.println(now());
            if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC");
            else Serial.println("------------SyncProvider has set the system time-------------");
            digitalClockDisplay();
            rtc0get = false;
            rtc1get = false;
            rtc2get = false;
            rtc3get = false;
            rtc4get = false;
            rtc5get = false;
            timesync = false;
            }        
          }
     }
    
}   // Ende syncWithNextion()        

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print("/");
  Serial.print(month());
  Serial.print("/");
  Serial.print(year());
  Serial.print("  Unix Time:  ");
  Serial.println(now());
}//Ende digitalClockDisplay()

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
} // Ende printDigits(int digits)

// return -1 wenn nichts da, sonst die Zahl
long getZahl() {
  static puffer p;
  static byte idx;
  static byte id;
  static byte anzFF;
  static bool inLesen = false;
  
if (Serial1.available() > 0 )
    {
    b = Serial1.read();
    //Serial.print("Serielles Byte empfangen : ");
    //Serial.println(b);
          
    if (!inLesen)
      {
      if (b == 0x71) //Beginn Zahlenfolge gefunden
        {
        //Serial.println("Beginn Zahlenfolge gefunden");
        inLesen = true;
        idx = 0;
        anzFF = 0;
        art = 1;
        return -1L;
        }
      }else
        if (b == 0xFF)  // Endeanteil
          {
          anzFF++;
          if (anzFF == 3) // fertig
            {
            //Serial.println("Ende gefunden");
            inLesen = false;
              if (art == 1)
                {
                return p.l;
                art = 0;
                }
             }else return -1L; // in Endebearbeitung
          }
          else
            if (art == 1)
              {
              p.arr[idx++] = b; // Zahlanteil schreiben
              return -1L;
              }
      } else return -1L;  // nichts da              
}// Ende GetZahl()

Die Uhrzeit wird, während syncWithNextion läuft, korrekt wiedergegeben.
Sobald der Arduino im loop läuft ist die Uhrzeit nicht mehr korrekt.

Serielle Ausgabe:
Code:
10:16:54.140 -> nex_rtc0 = 2019
10:16:54.173 -> nex_rtc1 = 3
10:16:54.173 -> nex_rtc2 = 6
10:16:54.173 -> nex_rtc3 = 10
10:16:54.206 -> nex_rtc4 = 16
10:16:54.206 -> nex_rtc5 = 57
10:16:54.241 -> ------------------RTC wurde abgefragt------------------
10:16:54.308 -> 6/3/2019   10:16:57
10:16:54.308 -> tm.Year=(nex_rtc0-1970) / tm.Year= 49
10:16:54.341 -> tm.Month=nex_rtc1 / tm.Month= 3
10:16:54.376 -> tm.Day=nex_rtc2 / tm.Day= 6
10:16:54.409 -> tm.Hour=nex_rtc3 / tm.Hour= 10
10:16:54.443 -> tm.Minute=nex_rtc4 / tm.Minute= 16
10:16:54.477 -> tm.Second=nex_rtc5 / tm.Second= 57
10:16:54.545 -> 06.03.2019 10:16:57
10:16:54.545 -> 10:16:57 6/3/2019
10:16:54.579 -> now()= 1551867417
10:16:54.579 -> ------------SyncProvider has set the system time-------------
10:16:54.647 -> 10:16:57 6/3/2019  Unix Time:  1551867417
-------Ende von syncWithNextion
10:17:02.120 -> 0:08:49 1/1/1970  Unix Time:  529

Muss ich die Zeit trotzdem noch mit return zurück senden?

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2019, 10:57
Beitrag #45
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Es hat einen Grund, warum ich Dir in meinem Vorschlag
Code:
time_t syncWithNextion()
geschrieben habe.
Warum Du daraus
Code:
void syncWithNextion()
machst, ist mir schleierhaft.
Du musst die Zeit schon zurückgeben, woher soll der Prozessor sie sonst kennen?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2019, 11:16
Beitrag #46
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
(06.03.2019 10:57)Tommy56 schrieb:  Es hat einen Grund, warum ich Dir in meinem Vorschlag
Code:
time_t syncWithNextion()
geschrieben habe.
Warum Du daraus
Code:
void syncWithNextion()
machst, ist mir schleierhaft.
Du musst die Zeit schon zurückgeben, woher soll der Prozessor sie sonst kennen?

Gruß Tommy

Danke
Habe die letzten Tage so viel rumprobiert das ich wohl vor lauter Bäume den Wald nicht mehr gesehen habe.

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2019, 17:53
Beitrag #47
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Hallo,
ist der Sketch aus #44 nur zum lesen/schreiben der Uhrzeit?
Gruß und Dank
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2019, 18:08
Beitrag #48
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Er soll die RTC aus dem Nextion auslesen und damit syncen, was er aber nicht macht, da die "syncWithNextion()" die Zeit nicht zurück gibt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Aktivierung nur in einer bestimmten Zeit Prospekteur 48 1.114 Gestern 12:57
Letzter Beitrag: MicroBahner
  LED-Symbol auf Nextion-TFT darstellen? alpenpower 3 176 11.09.2019 21:52
Letzter Beitrag: GuaAck
  delay Zeit falsch golex 9 1.040 24.05.2019 21:18
Letzter Beitrag: GuaAck
  Keypad auslesen Dieter_T 10 1.204 11.02.2019 20:46
Letzter Beitrag: Dieter_T
  2 Pt1000 über externen AD wandler auslesen Noob63 16 2.129 15.11.2018 20:10
Letzter Beitrag: ardu_arne
  mcp2515 CAN BUS nur eine ID auslesen Golf_Cabrio 6 1.416 24.10.2018 20:51
Letzter Beitrag: Golf_Cabrio
  Schleife bei Zeit x abbrechen BitsAndBytes 7 1.354 23.09.2018 00:30
Letzter Beitrag: BitsAndBytes
  Sensor mit 10 Hz auslesen Olafson Larson 7 1.374 05.07.2018 15:59
Letzter Beitrag: Tommy56
  Zeit-Server-Problem 182 19 3.770 07.06.2018 21:42
Letzter Beitrag: ardu_arne
  Windmesser auslesen will noch nicht so recht klappen.. Stargazer 12 2.990 05.04.2018 10:54
Letzter Beitrag: amithlon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste