ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino
DS3234 Werte auf Nextion - Druckversion

+- ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino (https://www.arduinoforum.de)
+-- Forum: Arduino-Allgemein (/arduino-Forum-Arduino-Allgemein)
+--- Forum: Programmierung (/arduino-Forum-Programmierung)
+--- Thema: DS3234 Werte auf Nextion (/arduino-Thread-DS3234-Werte-auf-Nextion)

Seiten: 1 2


DS3234 Werte auf Nextion - Kurt - 01.12.2019 14:00

Hallo,
bräuchte mal eure Hilfe.
Ich möchte vom DS3234 die Temperatur und den Wochentag auf einen Nextion
anzeigen. Im Prinzip funktioniert das auch. Die Temperatur wird ordentlich angezeigt.
Als Tag erscheint aber nur eine Zahl. Seriell wird der Tag richtig angezeigt. Soweit ich es verstehe, muss der Wert für den Tag erst umgewandelt werden. Hab aber noch keine Plan wie man sowas macht.
Hier ist mal der Code:
Code:
//DS3234 am Nextion

#include <DS3234.h>
#include "Nextion.h"
DS3234 rtc(8);  

NexText TAG = NexText(0, 7, "TAG");
NexText TEMP = NexText(0, 11, "TEMP");
NexButton bUpdate = NexButton(0, 2, "bUpdate");

NexTouch *nex_listen_list[] = {
  &bUpdate,
  NULL
};

void bUpdatePopCallback(void *ptr) {

  char WTAG = rtc.getDOWStr();
  float Temp = rtc.getTemp();
  
  if (isnan(Temp) || isnan(WTAG)) {
    return;
  }
  // Update rtc temp
  char temp[8];
  dtostrf(Temp, 8, 2, temp);
  TEMP.setText(temp);

  // Update rtc Wochentag
  char tag[10];
  dtostrf(WTAG, 6, 0, tag);
  TAG.setText(tag);
  
  Serial.print(WTAG);

}
void setup(void) {    
  rtc.begin();
  Serial.begin(9600);
    
  nexInit();
  
  bUpdate.attachPop(bUpdatePopCallback, &bUpdate);
    
}

void loop(void) {    

  nexLoop(nex_listen_list);

}

Bin dankbar für jeden Tipp
Grüsse Kurt


RE: DS3234 Werte auf Nextion - Tommy56 - 01.12.2019 14:20

Gib uns bitte einen Link zu Deiner Lib.

char WTAG = rtc.getDOWStr(); gibt wirklich nur 1 Zeichen zurück? Weil in WTAG nicht mehr rein passt.

Mit der Nextion-Lib arbeitet hier fast keiner, deshalb kann ich dazu nichts sagen. Wenn der Rest aber schon funktioniert, sollten wir das auch noch hin bekommen.

Dass die interne Temperaturmessung der Korrektur der Frequenz dient und nicht unbedingt die Umgebungstemperatur abbildet, ist Dir bekannt?

Gruß Tommy


RE: DS3234 Werte auf Nextion - hotsystems - 01.12.2019 14:31

Die Wandlung von Zahl in Tag machst du am einfachsten mit switch/case.


RE: DS3234 Werte auf Nextion - Tommy56 - 01.12.2019 14:46

(01.12.2019 14:31)hotsystems schrieb:  Die Wandlung von Zahl in Tag machst du am einfachsten mit switch/case.
Oder einfacher mit einem Array der Tagesnamen. Mal sehen, was seine Lib da zurück gibt.

Gruß Tommy


RE: DS3234 Werte auf Nextion - Kurt - 01.12.2019 14:47

Danke für d. Antworten.
Die Library hab ich von hier:
http://www.rinkydinkelectronics.com/library.php?id=71

Kurt


RE: DS3234 Werte auf Nextion - hotsystems - 01.12.2019 15:01

(01.12.2019 14:46)Tommy56 schrieb:  Oder einfacher mit einem Array der Tagesnamen. Mal sehen, was seine Lib da zurück gibt.

Gruß Tommy

Ja, ist evtl. sogar die bessere Lösung.

Leider kann ich die Library nicht lesen, da gezipt.


RE: DS3234 Werte auf Nextion - Kurt - 01.12.2019 15:12

Hab sie mal hier hochgeladen:
http://ursprungwetter.de/DS3234.cpp
http://ursprungwetter.de/DS3234.h


RE: DS3234 Werte auf Nextion - Tommy56 - 01.12.2019 15:16

Die Lib gibt die Tagesnahmen schon als Text aus.
Du müsstest in Deinem Sketch also schreiben: char *WTAG = rtc.getDOWStr();
Code:
char *DS3234::getDOWStr(uint8_t format)
{
    char *output= "xxxxxxxxx";
    Time t;
    t=getTime();
    switch (t.dow)
    {
        case MONDAY:
            output="Monday";
            break;
        case TUESDAY:
            output="Tuesday";
            break;
        case WEDNESDAY:
            output="Wednesday";
            break;
        case THURSDAY:
            output="Thursday";
            break;
        case FRIDAY:
            output="Friday";
            break;
        case SATURDAY:
            output="Saturday";
            break;
        case SUNDAY:
            output="Sunday";
            break;
    }    
    if (format==FORMAT_SHORT)
        output[3]=0;
    return output;
}

Das kannst Du aber auch selbst machen:
Code:
const char tage[][11] {"Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag",}
// oder
// const char tage[][3] {"Mo","Di","Mi","Do","Fr","Sa","So",}
Time t=getTime();
Serial.println(tage[t.dow-1];

Gruß Tommy