Hilfe bei Uhrzeit anzeigen

Habe den Code nun geändert, kann ich nicht mit irgendeinem Wert die Zeit einfach als Variable Speichern und dann einfach oben im Setup printen lassen, damit das im Loop aufhört zu flackern. Und generell, damit ich andere Werte noch damit benutzen kann.

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <Adafruit_SSD1306.h> //Libary fürs Display
#include <Adafruit_GFX.h>     //Libary fürs Display
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_WIDTH 128 // OLED display Breite, in pixels
#define SCREEN_HEIGHT 64 // OLED display Höhe, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);



 



void setup(){

    {
  Serial.begin(115200);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}

   
 
  {
  Serial.begin(115200); //Anfang Display Einstellungen
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(25,15); //Startbildschirm
  display.print("Welcome");
  display.setCursor(25,32);
  display.print("OpenPPG");
  display.display();
  delay(5000); //nach 5sek. wechsel auf Anzeige der Werte
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,10);
  display.print("RPM");
  display.setCursor(0,20);
  display.print("Altitude");
  display.setCursor(0,30);
  display.print("Temperature");
  display.setCursor(0,40);
  display.print("Acceleration");
  display.setCursor(0,50);
  display.print("AMP");
  display.display();
  }
   }

void loop() {
  // Programm: Auslesen der Werte und anzeigen auf dem Display


{
  tmElements_t tm;

  if (RTC.read(tm)) {
    display.setTextSize(1);
    display.setTextColor(WHITE);;
    display.setCursor(0,0);
    display.print("");
    display.print(tm.Hour);
    display.print(':');
    display.print(tm.Minute);
    display.print(':');
    display.print(tm.Second);
    display.display();
    display.setCursor(80,0);
    display.print(tm.Day);
    display.print('/');
    display.print(tm.Month);
    display.print('/');
    display.print(tmYearToCalendar(tm.Year));
    display.display();
    display.setTextSize(1);
    display.setTextColor(BLACK);
    display.setCursor(0,0);
    display.print("");
    display.print(tm.Hour);
    display.print(':');
    display.print(tm.Minute);
    display.print(':');
    display.print(tm.Second);
    display.display();
  delay(0);
}
}

}

Dir fehlt ein display.clearDisplay(); vor der Anzeige des Datums.

Ja aber wenn ich das mache, sind meine Werte die darunter stehen sollten, die im Void Setup stehen, wieder weg.

dann lösche den Bereich deiner Uhrzeit mit einem gefüllten Rechteck und dann schreibst erst deine neue Uhrzeit.

Nach display.clearDisplay(); muß der Text neu geschrieben werden.

Auf welcher Hardware soll das laufen?

Ich nutze gerne U8g2 von Oli Kraus, da kann man mit entsprechenden Fonts Dein Problem lösen. Beispiel:

#include <U8g2lib.h> // https://github.com/olikraus/u8g2
#include <Wire.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0);

void setup(void) {
  oled.setBusClock(800000);  // I²C 800 kHz Takt
  oled.begin();
  oled.setFont(u8g2_font_6x13_mr);
  oled.setCursor(0, 10);
  oled.print(F("Start"));
  oled.sendBuffer();          // transfer internal memory to the display
  delay(1000);
  oled.clearBuffer();          // clear the internal memory
  oled.setCursor(0, 10);
  oled.print(F("Millis")); // write something to the internal memory
}

void loop() {
  oled.setCursor(50, 10);
  oled.print(millis()%100);
  oled.sendBuffer();          // transfer internal memory to the display
  delay(1000);
}

Kommt die Meldung "Wenig Arbeitsspeicher verfügbar", sind noch Sparmöglichkeiten vorhanden.

Wenn du bei deiner Library bleiben willst, ist es mit dem Oled am einfachsten, du schreibst die komplette Ausgabe auf das Ole in eine Funktion und aktualisierst diese Anzeige jede Sekunde. Dann schreibst du konsequent alles neu.

Das du hier keinen Fehler vom Kompiler hast wundert mich
Setzt dein Code in </> vorher in der IDE " Bearbeiten Für Forum Kopieren und nach < ... einfügen

Bei mir bleibt der Kompiler sofort stehen mit "exit status 1"

Tolle inhaltsleere Information. Der hat bestimmt noch mehr gesagt.

Gruß Tommy

ja

C:\Users\Papi\Documents\Arduino\sketch_aug09b\sketch_aug09b.ino: In function 'void setup()':
sketch_aug09b:22:9: error: 'class Adafruit_SSD1306' has no member named 'begSSD1306_SWITCHCAPVCC'
 display.begSSD1306_SWITCHCAPVCC, 0x3C);in( // I2C address = 0x3C
         ^~~~~~~~~~~~~~~~~~~~~~~
sketch_aug09b:23:23: error: expected ')' before ';' token
 display.clearDisplay();
                       ^
 Benutzt: C:\Users\Papi\Documents\Arduino\libraries\Adafruit_GFX_Library
 Nicht benutzt: C:\Users\Papi\Documents\Arduino\libraries\SPFD5408-master-2

Das ist alles

Außer dem erlaubt Ada sowas

display.setTextColor(SSD1306_WHITE,BLACK)

Kompiler hat das geschluckt ob funktioniert ist andere frage

Ich versteh es nicht.... Einfach nur mal drüber nachdenken und schon wird das inhaltlich:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C address = 0x3C

Da brauch ich nicht mal nen Editor für.

Und ja, das hat der TO verkackt, aber warum geht das nicht in zwei Zeilen zu erklären was da falsch läuft?

Das bekommst Du minimal-invasiv dadurch in den Griff, indem du vor Ausgabe des neuen Wertes den alten in Hintergrundfarbe schreibst und damit löscht.

Löschen und neu schreiben des ganzen Displays geht zwar auch, kostet aber unnötig Zeit und führt zu Flackern an Stellen wo es unnötig ist.

Servus, erstmal danke für die ganzen Antworten.

  1. Ich hab noch nicht wirklich gepeilt wie die Programmiersprache funktioniert.
  2. Habe ich halt keine Ahnung was ich mit den Fehlermeldungen anfangen kann, da ich nirgends eine Erklärung für die bestimmten Meldungen finde.
  3. Hab mich erst heute in dem Forum angemeldet, und wusste nicht wie ich den Code bearbeitungsfähig einstelle.

Also wenn es euch nichts ausmacht könnt ihr mir ja vlt ein bissl besser erklären was ich falsch gemacht habe, und weshalb die Fehlermeldungen kommen​:sweat_smile::ok_hand:

SPS mit FUP zu programmieren ist für mich kein Problem, doch die Sprache ist absolut neu für mich

Dir wurde doch bereits beschrieben, was du anders machen kannst.
Und C++ kann man lernen, da gibt es sehr schöne Bücher die dir dabei helfen.
Auch wurde dir schon ein Fehler berichtigt.

Ja nur habe ich nicht die Zeit C++ zu lernen, außerdem habe ich den code schon berichtigt, habe ich ja auch oben geändert, meine jetzige Frage bezieht sich auf die Variablen in denen ich die Uhrzeit speichern kann

Ok, deine Entscheidung.
Ich bin dann raus.

Trotzdem danke :slight_smile:

Eine Frage warum benutzt du DS1307 RTC ? das ist die ungenauste Uhr was es gibt.
Es gibt eine "Atomuhr " für Arduino nemlich die DS3231

RTC-Modul DS3231 - für Arduino, Raspberry Pi, Funduino Mikrocontroller | eBay

Ein mal einstellen fast Jahr ruhe
No ja aber wen jemand jede Woche die Uhr stellen will.
Grüße

Ok. Dann bin ich wohl jetzt dran... Ich werde Dir nicht sehr viel helfen können, möchte es aber versuchen, nachdem ich das bisherige gelesen habe.
3.) Nicht darauf hinweisen. Das sieht jeder, der hier mitliest anhand einer Meldung durch die Forensoftware. Mir ist es wurscht - andere finden es Kacke.

2.) Das ist eigentlich gar nicht so schlimm.
Wichtig ist, das immer die erste Fehlermeldung zur Auswertung kommt und nicht die Letzte. Die ist dann ggfls. nur eine Folgemeldung.
Dazu in der IDE immer unter DATEI - VOREINSTELLUNGEN - den Haken setzen bei AUSFÜHRLICHE AUSGABE WÄHREND -> Kompilierung und dann das Feld COMPILER-WARNUNGEN auf ALLE stellen.

Wenn Du eine Fehlermeldung bekommst, dann in dem Fenster hochscrollen bis zur ersten Meldung.

Die nimmst und kopierst die raus. Und dann Suchmaschine Deiner schlechtesten Wahl :wink:

Wenn dann nicht weiter kommst, den kompletten Inhalt aus dem Fenster kopieren und hier einstellen. -> Bitte in Codetags.

1.)
Na da hab ich eine guteNachtLiteratur. Die hilft wirklich.
https://www.arduinoforum.de/code-referenz
Dort das pdf runterladen.
Jeden Abend lesen. Ne Hand voll Seiten. Einmal von vorn bis hinten. Nicht auswendig lernen!
Wenn Du damit durch bist, bist Du kein C++ Programmierer, aber Du weisst, wo Du findest, was Du gerade brauchst.

Alles andere dann wieder hier.
Herzlich Willkommen!

Ich benutze das, da es so vorgegeben ist bei dem Projekt