Fehlermeldung: a function-definition is not allowed here before '{' token

Ich bekomme diese Fehlermeldung beim Kompilieren von meinem Sketch… Ich hab ein bisschen Recherchiert, finde den Fehler Aber trotzdem nicht :confused:

Hier mein Sketch:

#include <DHT.h>                        // DHT-Bibliothek einbinden
#include <LiquidCrystal.h>            // LCD-Bibliothek einbinden

#define DHT1_Pin 5                     // Datenpin des DHT11(1) ist Pin 5
#define DHT2_Pin 6                     // Datenpin des DHT11(2) ist Pin 6
#define DHT3_Pin 7                     // Datenpin des DHT11(3) ist Pin 7

// Je nachdem, ob Sensoren vom Typ DHT11 oder DHT 22 benutzt werden die entsprechende "DHT_Typ"-Zeile benutzen
// Hier wird der DHT11 benutzt 

#define DHT_Typ DHT11                    // DHT 11 als Sensortyp festlegen
//#define DHT_Typ DHT22                 // DHT 22 als Sensortyp festlegen

DHT dht1(DHT1_Pin, DHT_Typ);         // Sensor 1 initialisieren
DHT dht2(DHT2_Pin, DHT_Typ);         // Sensor 2 initialisieren
DHT dht3(DHT3_Pin, DHT_Typ);         // Sensor 3 initialisieren

LiquidCrystal lcd(13,12,11,10,9,8);       // Display initialisieren
                                                       // Pins LCD->Arduino: RS->13, E->12, D4->11, D5->10, D6->9, D7->8  

void setup() {

 dht1.begin();                                   // Sensor 1 starten
 dht2.begin();                                   // Sensor 2 starten
 dht3.begin();                                   // Sensor 3 starten
 
 lcd.begin(16,2);                               // Display starten
 
}

void loop() {

 // Da das Display nur 2 Zeilen hat, werden die 3 Sensoren nacheinander ausgelesen und angezeigt
 
 float h1 = dht1.readHumidity();          // Auslesen der Luftfeuchtigkeit (Sensor 1)
 float t1 = dht1.readTemperature();    // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                           // 1. Zeichen, 1. Zeile
 lcd.print("T1: ");                              // Temp.: anzeigen
 lcd.print(t1);                                    // Temperaturwert anzeigen
 lcd.print(" C");                                 // C anzeigen
 lcd.setCursor(0,1);                          // 1. Zeichen, 2. Zeile
 lcd.print("F1: ");                             // Feuchte: anzeigen
 lcd.print(h1);                                 // Feuchtigkeitswert anzeigen
 lcd.print(" %");                             // % anzeigen
 delay(5000);                                 // 5 Sekunden Pause bis zur nächsten Messung
 
 float h2 = dht2.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
 float t2 = dht2.readTemperature(); // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                        // 1. Zeichen, 1. Zeile
 lcd.print("T2: ");                           // Temp.: anzeigen
 lcd.print(t2);                                // Temperaturwert anzeigen
 lcd.print(" C");                             // C anzeigen
 lcd.setCursor(0,1);                      // 1. Zeichen, 2. Zeile
 lcd.print("F2: ");                         // Feuchte: anzeigen
 lcd.print(h2);                              // Feuchtigkeitswert anzeigen
 lcd.print(" %");                          // % anzeigen
 delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung
 
 float h3 = dht3.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
 float t3 = dht3.readTemperature(); // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                        // 1. Zeichen, 1. Zeile
 lcd.print("T3: ");                           // Temp.: anzeigen
 lcd.print(t3);                                // Temperaturwert anzeigen
 lcd.print(" C");                             // C anzeigen
 lcd.setCursor(0,1);                      // 1. Zeichen, 2. Zeile
 lcd.print("F3: ");                         // Feuchte: anzeigen
 lcd.print(h3);                              // Feuchtigkeitswert anzeigen
 lcd.print(" %");                           // % anzeigen
 delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung#include <DHT.h>                        // DHT-Bibliothek einbinden
#include <LiquidCrystal.h>            // LCD-Bibliothek einbinden

#define DHT1_Pin 5                     // Datenpin des DHT11(1) ist Pin 5
#define DHT2_Pin 6                     // Datenpin des DHT11(2) ist Pin 6
#define DHT3_Pin 7                     // Datenpin des DHT11(3) ist Pin 7

// Je nachdem, ob Sensoren vom Typ DHT11 oder DHT 22 benutzt werden die entsprechende "DHT_Typ"-Zeile benutzen
// Hier wird der DHT11 benutzt 

#define DHT_Typ DHT11                    // DHT 11 als Sensortyp festlegen
//#define DHT_Typ DHT22                 // DHT 22 als Sensortyp festlegen

DHT dht1(DHT1_Pin, DHT_Typ);         // Sensor 1 initialisieren
DHT dht2(DHT2_Pin, DHT_Typ);         // Sensor 2 initialisieren
DHT dht3(DHT3_Pin, DHT_Typ);         // Sensor 3 initialisieren

LiquidCrystal lcd(13,12,11,10,9,8);       // Display initialisieren
                                                       // Pins LCD->Arduino: RS->13, E->12, D4->11, D5->10, D6->9, D7->8  

void setup() {

 dht1.begin();                                   // Sensor 1 starten
 dht2.begin();                                   // Sensor 2 starten
 dht3.begin();                                   // Sensor 3 starten
 
 lcd.begin(16,2);                               // Display starten
 
}

void loop() {

 // Da das Display nur 2 Zeilen hat, werden die 3 Sensoren nacheinander ausgelesen und angezeigt
 
 float h1 = dht1.readHumidity();          // Auslesen der Luftfeuchtigkeit (Sensor 1)
 float t1 = dht1.readTemperature();    // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                           // 1. Zeichen, 1. Zeile
 lcd.print("T1: ");                              // Temp.: anzeigen
 lcd.print(t1);                                    // Temperaturwert anzeigen
 lcd.print(" C");                                 // C anzeigen
 lcd.setCursor(0,1);                          // 1. Zeichen, 2. Zeile
 lcd.print("F1: ");                             // Feuchte: anzeigen
 lcd.print(h1);                                 // Feuchtigkeitswert anzeigen
 lcd.print(" %");                             // % anzeigen
 delay(5000);                                 // 5 Sekunden Pause bis zur nächsten Messung
 
 float h2 = dht2.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
 float t2 = dht2.readTemperature(); // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                        // 1. Zeichen, 1. Zeile
 lcd.print("T2: ");                           // Temp.: anzeigen
 lcd.print(t2);                                // Temperaturwert anzeigen
 lcd.print(" C");                             // C anzeigen
 lcd.setCursor(0,1);                      // 1. Zeichen, 2. Zeile
 lcd.print("F2: ");                         // Feuchte: anzeigen
 lcd.print(h2);                              // Feuchtigkeitswert anzeigen
 lcd.print(" %");                          // % anzeigen
 delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung
 
 float h3 = dht3.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
 float t3 = dht3.readTemperature(); // Auslesen der Temperatur (Sensor 2)

 lcd.setCursor(0,0);                        // 1. Zeichen, 1. Zeile
 lcd.print("T3: ");                           // Temp.: anzeigen
 lcd.print(t3);                                // Temperaturwert anzeigen
 lcd.print(" C");                             // C anzeigen
 lcd.setCursor(0,1);                      // 1. Zeichen, 2. Zeile
 lcd.print("F3: ");                         // Feuchte: anzeigen
 lcd.print(h3);                              // Feuchtigkeitswert anzeigen
 lcd.print(" %");                           // % anzeigen
 delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung

}

}

Und hier die Fehlermeldung:

In function ‘void loop()’:
sketch_mar23b:92:14: error: a function-definition is not allowed here before ‘{’ token
void setup() {

Du hast 2x void loop() in deinem Sketch, und das setup ist jetzt innerhalb des ersten loop. Das geht nicht - sowohl das 2x loop, als auch das definieren einer Funktion innerhalb einer anderen.

Und das Setup ist auch doppelt vorhanden. Da solltest du erst mal aufräumen.

Und setze deinen Sketch bitte in Code-Tags, dann ist dieser besser lesbar. Auch von mobilen Geräten. Das kannst du auch noch nachträglich machen. Setze davor [ code ] und dahinter [ / code ] ohne Leerzeichen.

@OP
Du hast Deinen Code zweimal reinkopiert; Nicht schlimm, die Codetags nicht zu verwenden ist schade.

Du solltest dazu schreiben, woher die Bibliotheken kommen, denn die Fehlermeldung sagt, das es schon bei der Initialisierung hakt.
Möglicherweise passt der Code nicht zur Lib.

#include <DHT.h>                        // DHT-Bibliothek einbinden
#include <LiquidCrystal.h>            // LCD-Bibliothek einbinden

#define DHT1_Pin 5                     // Datenpin des DHT11(1) ist Pin 5
#define DHT2_Pin 6                     // Datenpin des DHT11(2) ist Pin 6
#define DHT3_Pin 7                     // Datenpin des DHT11(3) ist Pin 7

// Je nachdem, ob Sensoren vom Typ DHT11 oder DHT 22 benutzt werden die entsprechende "DHT_Typ"-Zeile benutzen
// Hier wird der DHT11 benutzt

#define DHT_Typ DHT11                    // DHT 11 als Sensortyp festlegen
//#define DHT_Typ DHT22                 // DHT 22 als Sensortyp festlegen

DHT dht1(DHT1_Pin, DHT_Typ);         // Sensor 1 initialisieren
DHT dht2(DHT2_Pin, DHT_Typ);         // Sensor 2 initialisieren
DHT dht3(DHT3_Pin, DHT_Typ);         // Sensor 3 initialisieren

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);  // Display initialisieren
// Pins LCD->Arduino: RS->13, E->12, D4->11, D5->10, D6->9, D7->8

void setup()
  {
  dht1.begin();                                   // Sensor 1 starten
  dht2.begin();                                   // Sensor 2 starten
  dht3.begin();                                   // Sensor 3 starten
  lcd.begin(16, 2);                              // Display starten
  }

void loop()
  {
  // Da das Display nur 2 Zeilen hat, werden die 3 Sensoren nacheinander ausgelesen und angezeigt
  float h1 = dht1.readHumidity();          // Auslesen der Luftfeuchtigkeit (Sensor 1)
  float t1 = dht1.readTemperature();    // Auslesen der Temperatur (Sensor 2)
  lcd.setCursor(0, 0);                          // 1. Zeichen, 1. Zeile
  lcd.print("T1: ");                              // Temp.: anzeigen
  lcd.print(t1);                                    // Temperaturwert anzeigen
  lcd.print(" C");                                 // C anzeigen
  lcd.setCursor(0, 1);                         // 1. Zeichen, 2. Zeile
  lcd.print("F1: ");                             // Feuchte: anzeigen
  lcd.print(h1);                                 // Feuchtigkeitswert anzeigen
  lcd.print(" %");                             // % anzeigen
  delay(5000);                                 // 5 Sekunden Pause bis zur nächsten Messung
  float h2 = dht2.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
  float t2 = dht2.readTemperature(); // Auslesen der Temperatur (Sensor 2)
  lcd.setCursor(0, 0);                       // 1. Zeichen, 1. Zeile
  lcd.print("T2: ");                           // Temp.: anzeigen
  lcd.print(t2);                                // Temperaturwert anzeigen
  lcd.print(" C");                             // C anzeigen
  lcd.setCursor(0, 1);                     // 1. Zeichen, 2. Zeile
  lcd.print("F2: ");                         // Feuchte: anzeigen
  lcd.print(h2);                              // Feuchtigkeitswert anzeigen
  lcd.print(" %");                          // % anzeigen
  delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung
  float h3 = dht3.readHumidity();       // Auslesen der Luftfeuchtigkeit (Sensor 2)
  float t3 = dht3.readTemperature(); // Auslesen der Temperatur (Sensor 2)
  lcd.setCursor(0, 0);                       // 1. Zeichen, 1. Zeile
  lcd.print("T3: ");                           // Temp.: anzeigen
  lcd.print(t3);                                // Temperaturwert anzeigen
  lcd.print(" C");                             // C anzeigen
  lcd.setCursor(0, 1);                     // 1. Zeichen, 2. Zeile
  lcd.print("F3: ");                         // Feuchte: anzeigen
  lcd.print(h3);                              // Feuchtigkeitswert anzeigen
  lcd.print(" %");                           // % anzeigen
  delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung#include <DHT.h>                        // DHT-Bibliothek einbinden
  }

Habe das gerade mit dem Code aus dem Beitrag von xy ausprobiert.
Die Bibliotheksverwaltung meldet, dass es zwei DHT Libraries gibt (für Arduino und für ESP).
DHT-Libs.PNG

Frage 1: Hast Du die richtige erwischt?

Die für Arduino hat Abhängigkeiten zu anderen Libraries.

Frage 2: Hast Du die mit installieren lassen?

Falls zweimal ja: Dann kompiliert es (mit ein paar Warnungen aus den Libraries).

Bitte in den Voreinstellungen mal alle Compiler-Warnungen anschalten und dann die komplette Fehlermeldung posten.

Gruß Walter

DHT-Libs.PNG

Er hat den Code nicht nur in seinen Post 2x reinkopiert, dass ist wohl bei seinem übersetzten Sketch schon so. Denn die Fehlermeldung passt exakt zu dem Code, so wie er im Post steht.

Nehme ich das 'Doppel' raus, kompiliert das bei mir ( für einen Uno ) ohne Fehlermeldung. Das ganz ist wohl ein copy-paste-paste Problem.

Yep. Da habe ich wohl zu kompliziert gedacht.

Das Spannende daran ist: Die schließende Klammer “}” am Ende des ersten Teils fehlt (Zeile 64). Da sieht das so aus:

  delay(5000);                             // 5 Sekunden Pause bis zur nächsten Messung#include <DHT.h>                        // DHT-Bibliothek einbinden
#include <DHT.h>                        // DHT-Bibliothek einbinden

und dann bekommt man auch noch die Meldung

sketch_mar25a:129:1: error: expected '}' at end of input

@mindblow:
Im Prinzip ist es schon richtig, mit der Abarbeitung der Fehler oben anzufangen. Manchmal aber versteckt sich auch sinnvolle Information im Rest. Wenn Du der fehlenden Klammer auf den Grund gehst, hättest Du das Problem vielleicht schon gesehen.

Und wenn die Klammer da ist, kommen haufenweise Meldungen der Art

...previously declared here

Damit ist es dann ganz eindeutig.

wno158: Das Spannende daran ist: Die schließende Klammer "}" am Ende des ersten Teils fehlt (Zeile 64).

Genau, das 2. paste war nicht ganz am Ende sondern vor der schließenden Klammer ( die steht nämlich noch ganz am Ende). Deshalb ergab sich die Verschachtelung von Funktionen, die zu dem angegebenen Fehler geführt hat.