Fehlermeldung Bei Code

Hallo, ich habe bei meinem Code eine Fehlermeldung die lautet: In function 'void setup()':
sketch_sep13a:28:21: error: expected primary-expression before ';' token
if (RTC.write(tm;))

Mein ziel ist es die Uhrzeit am Anfang des Programms zu setzen und Anschließend mit noch anderen Werten auf einem Display auszugeben. Leider komme ich selbst nicht auf die Lösung was er da von mir will. Hier mein Code:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Time.h>
#include <DS1307RTC.h>
#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);

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

void setup() 
{
  bool parse=false;
  bool config=false;
  bool getDate(const char *str);
  bool getTime(const char *str);

  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm;))
    {
      config = true;
    }
  }

  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time=\"");
    Serial.print(__TIME__);
    Serial.print("\", Date=\"");
    Serial.print(__DATE__);
    Serial.println("\"");
  }
}

{ 
  setSyncProvider(RTC.get);

  Serial.begin(9600); //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
  }
  }

  void loop(){
  
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}


{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}
  {
    display.clearDisplay();
    tmElements_t tm;
    if(RTC.read(tm)){
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    print2digits(tm.Hour);
    display.write(':');
    print2digits(tm.Minute);
    display.write(':');
    print2digits(tm.Second);
    display.setCursor(80,0);
    display.setTextSize(1);
    display.print(tm.Day);
    display.write('.');
    display.print(tm.Month);
    display.write('.');
    display.print(tmYearToCalendar(tm.Year));
     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();
    
    }
    else
    {
      if(RTC.chipPresent())
      {
        display.setTextSize(1);
  display.setTextColor(WHITE);
        display.print("DS1307 stopped,run set time");
        display.display();
        }
        else
        {
          display.setTextSize(1);
  display.setTextColor(WHITE);
        display.print("DS1307 read error,check circuit");
        display.display();
          }
          delay(9000);
      }
      delay(1000);
     
  }

    void print2digits(int number) {
  if (number >= 0 && number < 10) {
    display.write('0');
    // display.display();
  }
  display.print(number);
   //display.display();
  //display.println();
}
}

Ich denke diesmal habe ich den Code richtig eingefügt.
Danke schon mal.
Mfg John

Lose the semicolon

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

i did this, but then it says "Expected Primary expression before ")" Token, so i did the semikulon

Sieht so aus.
Neben dem falsch gesetzten Semikolon, fehlt Dir eine Instanz tm

  tmElements_t tm;

Dann hast Klammerfehler.
Drück mal STRG-T
Das ganze setup() aufräumen.
Und dann darfst im loop weitermachen. Durch die Klammerfehler bekommst Du print2digits an falscher Stelle.

etc. pp.

In deinem Code sind mehrere gruselige Fehler!

Die Ursache ist auch leicht zu finden:

Das ist schade!
Kannst aber auch nur du ändern.

Also:
Wo kommt das tm in if (RTC.write(tm)) her?
Was bezweckt der alleine stehende Anweisungsblock dort?
Funktionen in Funktionen? Funktioniert das überhaupt?

Viele weitere Meldungen!

Gut möglich wie gesagt ich hab kein großen Plan von C++ und der Hinweis darauf das ich keine Zeit habe das zu lernen hilft auch nicht dabei es zu verstehen. Wenn der Kompiler einfach ma dazu schrieben würde WAS GENAU ihm fehlt oder was er haben will wäre das für ein Anfänger ohne Zeit wie mich, viel leichter zu verstehen. Da er das nicht tut und ich wie gesagt keine Zeit habe eine komplette Programmiersprache zu lernen, frage ich hier. Und hoffe einfach das jemand dafür Verständnis hat, dass ich kein Informatikstudium für das Arduino Projekt machen möchte.

Keine Ahnung, das war ein Beispiel Programm, welches Funktioniert wenn ich es nicht in mein Programm einfüge. Sobald ich es einfüge passieren die Fehler, die mir auf Grund der Tatsache dass mir ja nicht gesagt wird, was fehlt oder was es bedeutet, mir nicht erklärbar sind.

Natürlich nicht!
Aber es könnte dich anregen etwas für das "Verständnis" zu tun!
Für das Verstehen bist du dann selbst verantwortlich.
Ich kann es dir nicht abnehmen.

Doch das tut er!!!!
Siehe:

E:\Programme\arduino\portable\sketchbook\sketch_sep13e\sketch_sep13e.ino: In function 'void setup()':
sketch_sep13e:30:21: error: expected primary-expression before ')' token
   30 |     if (RTC.write(tm))
      |                     ^

Das ist eine ganz klare Ansage!
Er erwartet einen primären Ausdruck vor der schließenden Klammer.
Den findet er nicht.
Anders gesagt: Ihm hat keine Ahnung was tm bedeuten soll.
Und das habe ich dir auch schon gesagt.

Iss klar!

Frei übersetzt: Du hast keine Zeit, und wir sollen deine Arbeit machen.

Dafür habe ich volles Verständnis!
Nur wird dich mein Verständnis keinen Millimeter weiter bringen.

Meine private, vielleicht sogar unmaßgebliche, Meinung:
Wer programmieren möchte, muss die Sprache lernen wollen, welche er/sie/es da verwendet.
Das scheint bei dir nicht der Fall zu sein.
Ich empfinde das als schade.
Und damit enden meine fruchtlosen Hilfeversuche hier auch erstmal.....

1 Like

In diesem Forum (wie in den meisten Foren) gibt es Hilfe zur Selbsthilfe.

Ansonsten gilt, wenn Du etwas willst, es aber nicht kannst:

Du hast wie immer im Leben 4 Möglichkeiten:

  1. Du lernst es.
  2. Du bezahlst einen Dienstleister, der das für Dich tut
  3. Du findest jemanden, der es für Dich für lau macht
  4. Du verzichtest darauf.

Dabei halte ich 1. für die beste Lösung und 3. für die unwahrscheinlichste.

Gruß Tommy

Ach ja...
Nur für den Fall, dass du wissen möchtest, was denn wohl eine primary-expression sein könnte, das ist hier vollständig beschrieben:

https://en.cppreference.com/w/cpp/language/expressions