Hoe de Tijd/Datum aanpassen in DS3231 via de Nextion

algemene C code
Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Hoe de Tijd/Datum aanpassen in DS3231 via de Nextion

Berichtdoor Creator » 07 Sep 2019, 19:05

Ik heb een projectje waar ik niet uitkom.

Setup:
Hardware: Mega 2560, DS3231 RTC, Nextion basic display;

Op de nextion wordt de datum en tijd in drie stringen getoond t.w.:
- Dag "Maandag"
- Datum "22 - Sep - 2019
- Tijd "20 : 35 : 45"
Dit gebeurd door de opdracht " rtc.now(); " en gebruik van de library <RTClib.h>

Dit werkt allemaal prima, maar nu wil de tijd en datum kunnen aanpassen via "Pushbuttons" op de Nextion.
Daarvoor zijn 2 schermen aangemaakt "Datum aanpassen" en "Tijd aanpassen" met ieder 6 Pushbuttons 3x plus en 3x min voor respectievelijk Dag, Maand, Jaar en Uren, Minuten, Seconden. En ieder een tekstveld voor weergeven. De weekdag wordt niet gebruikt in deze schermen.

Kan dit met de "setDate" en "setTime" opdrachten van RTClib?

Code: Alles selecteren
#include <Nextion.h>        // Bibliotheek voor HMI display
#include <RTClib.h>          // Bibliotheek voor DS3231 Real Time Clock

RTC_DS3231 rtc;

const char* weekdag[] = {"Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"};
const char* maand[] = {"Fout","Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"};


void setup()
{
  nexInit();                 // Start communicatie met Nextion display
  rtc.begin();              // Start communicatie met RTC
}

void loop() 
{
  rtcTijd();                 // display "weekdag" DD-"maand"-JJJJ en UU:MM:SS
}


void rtcTijd()  // weekdag, datum en tijd display
{
  DateTime now = rtc.now();  // gebruik de actuele tijd van dertc

  char datum[12];
  sprintf(datum, "%2d-%s-%04d", now.day(), maand[now.month()], now.year());
  Serial2.print(F("tdatum.txt=\""));
  Serial2.print(datum);
  Serial2.print("\"");
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);

  char dag[12];
  sprintf(dag, "%s ", weekdag[now.dayOfTheWeek()]);
  Serial2.print(F("tdag.txt=\""));
  Serial2.print(dag);
  Serial2.print("\"");
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);

  char tijd[12];
  sprintf(tijd, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  Serial2.print(F("ttijd.txt=\""));
  Serial2.print(tijd);
  Serial2.print("\"");
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hoe de Tijd/Datum aanpassen in DS3231 via de Nextion

Berichtdoor shooter » 07 Sep 2019, 20:23

ja dat kan, wel uitkijken dat je dat niet in een loop doet maar telkens met een instructie om te veranderen.
een datum opvragen en dan met toetsen omhoog en omlaag bijv.
paul deelen
shooter@home.nl

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Hoe de Tijd/Datum aanpassen in DS3231 via de Nextion

Berichtdoor Creator » 08 Sep 2019, 09:10

Ok,

Ik heb enkele opdrachten geprobeerd maar krijg steeds meldingen dat de aanspreek namen niet gedeclareerd zijn.
bijv. "getDS3231time was not declared in this scope"
Hetzelfde gebeurd bij "read".
In de library kan ik niet achterhalen welk statement kan worden gebruikt om de rtc uit te lezen.

Wat is de beste library om hiervoor te gebruiken, er zijn er zoveel,
<Wire.h> wordt geinstaleerd bij de DS3231 van Arduino zelf
<RTClib.h> van Adafruit DS3231.master
<Time.h> van Arduino time.master
<Timelib.h> , enz

Door de bekende bomen zie ik het niet meer en door gebrek aan kennis weet ik niet welke.
Wie kan mij een eind op weg helpen?

Hier de code welke ik heb toegevoegd voor de pushbuttons

Code: Alles selecteren
#include <Nextion.h>        // Bibliotheek voor HMI display
#include <RTClib.h>         // Bibliotheek voor DS3231 Real Time Clock

RTC_DS3231 rtc;
//************************mogelijkheid tot tekst in datum voor weekdag en maand****************************
const char* weekdag[] = {"Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"};
const char* maand[] = {"Fout", "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"};

NexButton buurpls = NexButton(4, 3, "buurpls");  // hour + on page Set Time
NexButton buurmin = NexButton(4, 2, "buurmin");  // hour -

NexText ttijdH = NexText(4, 8, "ttijdH");         // display (set) hour (2 digit)

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

void buurplsPushCallback(void *ptr)   // hour plus
{   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    // retrieve data from DS3231
    readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
    if (hour == 23){hour=-1;}
    setDS3231time(second, minute, hour+1, dayOfWeek, dayOfMonth, month, year);
}

void buurminPushCallback(void *ptr)  // hour minus
{   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    // retrieve data from DS3231
    readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
    if (hour == 0){hour=24;}
    setDS3231time(second, minute, hour-1, dayOfWeek, dayOfMonth, month, year);
}

void setup() //*****************************Setup van programma *******************************************
{
  nexInit();                // Start communicatie met Nextion display
  rtc.begin();              // Start communicatie met RTC

   buurpls.attachPush(buurplsPushCallback, &buurpls);
   buurmin.attachPush(buurminPushCallback, &buurmin);
}

void loop()  //*****************************Hoofd programma ***********************************************
{
  rtcTijd();                    // display weekdag DD-MM-JJJJ op page 0
}


Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten