Uhrzeit der RTC auf TFT ausgeben

Hallo zusammen,

gerne würde ich die aktuelle Uhrzeit, die mir meine RTC liefet, auf meinem SainSmart TFT_320qvt ausgeben

Leider erhalte ich dann immer folgende Fehlermeldung:

\libraries\UTFT/UTFT.h:216:8: note: candidate expects 4 arguments, 1 provided

exit status 1
invalid conversion from 'byte {aka unsigned char}' to 'char*' [-fpermissive]

Im Anhang befindet sich mein Sketch.

Kann mir bitte jemand helfen?

Mein Projekt:
zeitliche LED-Steuerung mit Dimmung --> RTC liefert die Echtzeit --> Touchdisplay bietet Modusauswahl

display_test1.ino (5.11 KB)

Selvister:
Kann mir bitte jemand helfen?

Klar, wenn du deinen Sketch hier in Code-Tags postest, (Schaltfläche </>)

    #include <UTFT.h> 
    #include <UTouch.h>
    #include <Wire.h>                       // For some strange reasons, Wire.h must be included here
    #include <DS1307new.h>
    #define DS3231_I2C_ADDRESS 0x68
    //==== Creating Objects
    UTFT    myGLCD(SSD1289,38,39,40,41); //Parameters should be adjusted to your Display/Schield model
    UTouch  myTouch( 6, 5, 4, 3, 2);
    //==== Defining Variables
    extern uint8_t SmallFont[];
    extern uint8_t BigFont[];
    extern uint8_t SevenSegNumFont[];
    extern unsigned int bird01[0x41A];
    int x, y;
    char currentPage, selectedUnit;
    uint16_t startAddr = 0x0000;            // Start address to store in the NV-RAM
    uint16_t lastAddr;                      // new address for storing in NV-RAM
    uint16_t TimeIsSet = 0xaa55;            // Helper that time must not set again
    #define DS3231_I2C_ADDRESS 0x68
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
      return( (val/10*16) + (val%10) );
    }
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
      return( (val/16*10) + (val%16) );
    }



    void setup() {
    // Initial setup
      Serial.begin(9600);
      pinMode(18, OUTPUT);
      pinMode(19, OUTPUT);
      digitalWrite (18, LOW);
      digitalWrite (19, HIGH);
      myGLCD.InitLCD();
      myGLCD.clrScr();
      myTouch.InitTouch();
      myTouch.setPrecision(PREC_MEDIUM);

      currentPage = '0'; // Indicates that we are at Home Screen
      selectedUnit = '0'; // Indicates the selected unit for the first example, cms or inches
      Wire.begin();
    }

    void loop(){
      displayTime();
      drawHomeScreen();  // Draws the Home Screen
    }

void drawHomeScreen() {
  // Title
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  
  myGLCD.setBackColor(0,0,0); // Sets the background color of the area where the text will be printed to black
  myGLCD.setColor(255, 255, 255); // Sets color to white
  myGLCD.setFont(BigFont); // Sets font to big
  myGLCD.print("Seewasser-Aquarium", CENTER, 10); // Prints the string on the screen
  myGLCD.setColor(255, 0, 0); // Sets color to red
  myGLCD.drawLine(0,32,319,32); // Draws the red line
  myGLCD.setColor(255, 255, 255); // Sets color to white
  myGLCD.setFont(SmallFont); // Sets the font to small
  //myGLCD.print("von Marc Moll", CENTER, 41); // Prints the string

 //Uhrzeit
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);

  myGLCD.print(hour, CENTER, 41);
  myGLCD.print(":");
  myGLCD.print(minute, CENTER, 41);
  myGLCD.print(":");
  
  myGLCD.setFont(BigFont);
  myGLCD.print("Modus auswaehlen", CENTER, 64);
  
  // Button - Automatisch
  myGLCD.setColor(0, 0, 255); // Sets blue color
  myGLCD.fillRoundRect (35, 90, 285, 130); // Draws filled rounded rectangle
  myGLCD.setColor(255, 255, 255); // Sets color to white
  myGLCD.drawRoundRect (35, 90, 285, 130); // Draws rounded rectangle without a fill, so the overall appearance of the button looks like it has a frame
  myGLCD.setFont(BigFont); // Sets the font to big
  myGLCD.setBackColor(0, 0, 255); // Sets the background color of the area where the text will be printed to green, same as the button
  myGLCD.print("Automatisch", CENTER, 102); // Prints the string
  
  // Button - Manuell
  myGLCD.setColor(16, 167, 103);
  myGLCD.fillRoundRect (35, 140, 285, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (35, 140, 285, 180);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(16, 167, 103);
  myGLCD.print("Manuell", CENTER, 152);
  // Button - nur Mondlicht
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRoundRect (35, 190, 285, 230);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (35, 190, 285, 230);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("nur Mondlicht", CENTER, 202);
}

void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print(":");
  if (second<10)
  {
    Serial.print("0");
  }
  Serial.print(second, DEC);
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.println(year, DEC);
  delay(1000);

}

void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

Hoffe so sehr, dass du helfen kannst =)
Ist echt frustrierend weil man immer vom Hölzchen aufs Stöckchen kommt und immer neue Lösungen für neue Probleme googlen muss. Sitze seit 3 Stunden jetzt hier,um die Uhrzeit auf dem Display anzuzeigen. Aber nichts klappt :confused:

Wird denn die Zeit im SerialMonitor richtig angezeigt?
Wenn ja, warum überträgst du den Inhalt der Variable nicht auch auf das TFT?

Selvister:
Hoffe so sehr, dass du helfen kannst =)
Ist echt frustrierend weil man immer vom Hölzchen aufs Stöckchen kommt und immer neue Lösungen für neue Probleme googlen muss. Sitze seit 3 Stunden jetzt hier,um die Uhrzeit auf dem Display anzuzeigen. Aber nichts klappt :confused:

Nimm es mir bitte nicht übel, aber dir fehlen einfach zu viele Grundlagen. Die solltest du unbedingt lernen.

HotSystems:
Wird denn die Zeit im SerialMonitor richtig angezeigt?
Wenn ja, warum überträgst du den Inhalt der Variable nicht auch auf das TFT?

Ja die Zeit wird im SerialMonitor angezeigt, aber wenn ich zB "hour" auf dem TFT anzeigen möchte, kommt oben besagte Fehlermeldung

Selvister:
Ja die Zeit wird im SerialMonitor angezeigt, aber wenn ich zB "hour" auf dem TFT anzeigen möchte, kommt oben besagte Fehlermeldung

Du sollst es ja auch wie im SerialMonitor machen.

HotSystems:
Du sollst es ja auch wie im SerialMonitor machen.

Habe ich das nicht?

Selvister:
Habe ich das nicht?

Dann sieh dir mal deinen Sketch an.

  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);

  myGLCD.print(hour, CENTER, 41);
  myGLCD.print(":");
  myGLCD.print(minute, CENTER, 41);
  myGLCD.print(":");

Ich springe in die readDS3231time Funktion, lese die Zeit im RTC aus und möchte dann zB mit "hour" die Stunden im GLCD anzeigen. Ist das falsch?

Selvister:
Ich springe in die readDS3231time Funktion, lese die Zeit im RTC aus und möchte dann zB mit "hour" die Stunden im GLCD anzeigen. Ist das falsch?

Oh sorry, das habe ich tatsächlich übersehen.

Du musst für die Übergabe den Wert von Byte in einen string wandeln.

Das sollte so gehen, ich kann es aktuell nicht testen.

char string[4];
snprintf(string, 4, "%d", hour);
Serial.println(string);   
myGLCD.print(string, CENTER, 41);

Das aber für alle Ausgaben der RTC.

Sorry nochmal für den falschen Hinweis.

Ist denn   myGLCD.print(":");  korrekt ? Wenn ja, wo erscheint der Doppelpunkt?

Stunde und Minute zusammen ginge vermutlich so:

char zeit[6];
sprintf(zeit, "%02d:%02d",hour, minute);
Serial.println(zeit);   
myGLCD.print(zeit, CENTER, 41);

HotSystems:
Sorry nochmal für den falschen Hinweis.

Das ist nicht schlimm! Aber bitte bedenke dass es user gibt, die nicht auf dem gleichen Wissenstand sind, wie du! Trotzdem danke ich dir sehr für deine Hilfe. Werde es direkt ausprobieren!
Ich hatte mir schon gedacht, dass es an dem Datentyp lag, aber hatte nichts näheres dazu gefunden!

Wärst du evtl. dazu bereit deinen Code ein wenig näher zu erklären? Das mit dem sprintf(zeit, "%02d:%02d",hour, minute); verstehe ich nämlich nicht wirklich!

Vielen Dank

Das mit dem sprintf(zeit, "%02d:%02d",hour, minute); verstehe ich nämlich nicht wirklich!

sprintf ist Standard-C : http://www.cplusplus.com/reference/cstdio/sprintf/

In deinem Fall ist char zeit[6]; der Ergebnis-Text, der hinterher etwas wie "12:34" enthält.
Der Format-String enthält "%02d" Formatierungsanweisung für eine Dezimalzahl mit 2 Stellen mit (bei Bedarf) führender Null.

Hier auch auf Deutsch: (Bildschirmausgaben | C-HowTo)