Error: "a function-definiton is not allowed here before '{' token"

Hallo,
mir ist bewusst, dass schon zahlreiche Post zu oben genannter Fehlermeldung existieren, allerdings haben mir diese beim Lösen meines Problemes im Endeffekt nicht geholfen.
Und zwar muss ich für die Schule ein Projekt machen, in dem man zu einem Musikstück eine "Lightshow" mit eben maximal 12 LEDs programmiert. Dementsprechend ist der Code sehr simpel, denn im Unterricht kratzt man eigentlich nur an der Oberfläche dieses Programmes (der Lehrer hat mir auch nicht helfen können).

Das hier ist der Code:

void loop() {





void DesDur() {
// Der erste Akkord der viertaktigen Akkordfolge.
  digitalWrite(13,HIGH);
  delay(L);
  digitalWrite(13,LOW);
  digitalWrite(5,HIGH);
  delay(K);
  digitalWrite(5,LOW);
  digitalWrite(13,HIGH);
  delay(L);
  digitalWrite(13,LOW);
  digitalWrite(5,HIGH);
  delay(K);
  digitalWrite(5,LOW);
  digitalWrite(13,HIGH);
  delay(L);
  digitalWrite(13,LOW);
  digitalWrite(5,HIGH);
  delay(K);
  digitalWrite(5,LOW);
  digitalWrite(13,HIGH);
  delay(L);
  digitalWrite(13,LOW);
  digitalWrite(5,HIGH);
  delay(K);
  digitalWrite(5,LOW);
}



void AsDur() {
// Der zweite Akkord der viertaktigen Akkordfolge.
  digitalWrite(3,HIGH);
  delay(L);
  digitalWrite(3,LOW);
  digitalWrite(7,HIGH);
  delay(K);
  digitalWrite(7,LOW);
  digitalWrite(3,HIGH);
  delay(L);
  digitalWrite(3,LOW);
  digitalWrite(7,HIGH);
  delay(K);
  digitalWrite(7,LOW);
  digitalWrite(3,HIGH);
  delay(L);
  digitalWrite(3,LOW);
  digitalWrite(7,HIGH);
  delay(K);
  digitalWrite(7,LOW);
  digitalWrite(3,HIGH);
  delay(L);
  digitalWrite(3,LOW);
  digitalWrite(7,HIGH);
  delay(K);
  digitalWrite(7,LOW);
}



void Bmoll() {
// Der dritte Akkord der viertaktigen Akkordfolge.
  digitalWrite(2,HIGH);
  delay(L);
  digitalWrite(2,LOW);
  digitalWrite(6,HIGH);
  delay(K);
  digitalWrite(6,LOW);
  digitalWrite(2,HIGH);
  delay(L);
  digitalWrite(2,LOW);
  digitalWrite(6,HIGH);
  delay(K);
  digitalWrite(6,LOW);
  digitalWrite(2,HIGH);
  delay(L);
  digitalWrite(2,LOW);
  digitalWrite(6,HIGH);
  delay(K);
  digitalWrite(6,LOW);
  digitalWrite(2,HIGH);
  delay(L);
  digitalWrite(2,LOW);
  digitalWrite(6,HIGH);
  delay(K);
  digitalWrite(6,LOW);
}



void GesDurNormal() {
// Der vierte Akkord der viertaktigen Akkordfolge, ohne Tonverschiebung.
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
}



void GesDurVersch() {
// Der vierte Akkord der viertaktigen Akkordfolge, mit Tonverschiebung.
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(4,HIGH);
  delay(L);
  digitalWrite(4,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
  digitalWrite(5,HIGH);
  delay(L);
  digitalWrite(5,LOW);
  digitalWrite(8,HIGH);
  delay(K);
  digitalWrite(8,LOW);
}




void Schluss() {
// Die letzten vier Takte vor dem Schlussakkord.
  // Schluss erster Takt.
  digitalWrite(13,HIGH);
  digitalWrite(5,HIGH);
  digitalWrite(9,HIGH);
  delay(G);
  digitalWrite(13,LOW);
  digitalWrite(5,LOW);
  digitalWrite(9,LOW);
  // Schluss zweiter Takt.
  digitalWrite(2,HIGH);
  digitalWrite(6,HIGH);
  digitalWrite(11,HIGH);
  delay(G);
  digitalWrite(2,LOW);
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  // Schluss dritter Takt.
  digitalWrite(2,HIGH);
  digitalWrite(6,HIGH);
  digitalWrite(10,HIGH);
  delay(G);
  digitalWrite(2,LOW);
  digitalWrite(6,LOW);
  digitalWrite(10,LOW);
  // Schluss vierter Takt.
  digitalWrite(4,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(12,HIGH);
  delay(G);
  digitalWrite(4,LOW);
  digitalWrite(8,LOW);
  digitalWrite(12,LOW);
}



void Schlussakkord() {
  digitalWrite(13,HIGH);
  digitalWrite(5,HIGH);
  digitalWrite(9,HIGH);
  delay(G+G);
  digitalWrite(13,LOW);
  digitalWrite(5,LOW);
  digitalWrite(9,LOW);
}



void Akkorde() {
// Bildet die viertaktige Akkordfolge ohne Tonverschiebung.
  DesDur;
  AsDur;
  Bmoll;
  GesDurNormal;
}



void AkkordeVersch() {
// Bildet die viertaktige Akkordfolge mit Tonverschiebung.
  DesDur;
  AsDur;
  Bmoll;
  GesDurVersch;
}




void AkkordeBass() {
// Bildet die viertaktige Akkordfolge ohne Tonverschiebung.
  DesDurBass;
  AsDurBass;
  BmollBass;
  GesDurNormalBass;
}



void AkkordeVerschBass() {
// Bildet die viertaktige Akkordfolge mit Tonverschiebung.
  DesDurBass;
  AsDurBass;
  BmollBass;
  GesDurVerschBass;
}





// Das finale Stück.
  AkkordeVersch;
  Akkorde;
  AkkordeVersch;
  Akkorde;
  Akkorde;
  AkkordeBass;
  AkkordeBass;
  AkkordeVersch;
  Akkorde;
  AkkordeVersch;
  Akkorde;
  Akkorde;
  AkkordeBass;
  AkkordeBass;
  Bruecke;
  Chorus2;
  AkkordeBass;
  DesDurBass;
  AsDurBass;
  BmollBass;
  GesDurVersch;
  Schluss;
  Schlussakkord;
}

In diesem Code kommt die Fehlermeldung beim Unterprogramm "AkkordeVerschBass" (fast am Ende des Codes). Ich habe den Code kürzen müssen, eigentlich wären die restlichen Unterprogramme und die Variablen natürlich noch definiert.

Ich schaffe es zwar, die Fehlermeldung durch das Setzen von weiteren geschweiften Klammern zu beheben, jedoch nur zu verschieben. Ich kriege also immer die selbe Fehlermeldung, bloß an anderen Stellen. Bisher hat keiner meiner etlichen Versuche eine endgültige Lösung gebracht.

Aus den anderen Posts zu dieser Fehlermeldung wurde deutlich, dass das Problem wohl bei den Klammer liegt, aber ich kann keine Klammern finden, die geöffnet und nicht mehr geschlossen werden oder umgekehrt.

Danke im Voraus für alle zur Hilfe gedachten Antworten.

(Für die, die es interessiert: Der Code stellt praktisch die Klavierbegleitung zu "Someone you loved" von Lewis Capaldi in LEDs dar.)

Du hast auf dem 1. Blick die loop() { nicht mit einer } vor den Funktionen abgeschlossen, so dass diese scheinbar innerhalb von loop angelegt werden.

Gruß Tommy.

In C++ kann man keine Funktionsdefinitionen schachteln.

Funktionsaufrufe hast du wohl auch falsch gemacht.

void setup() {
DesDur(); // ein Aufruf, beachte die Klammern
} // Ende von Setup()

//die Funktionsdefinition
void DesDur() { 
 ...
}

Arduino macht zusätzlich zum C++ Standard für dich die eigentlich erforderlichen Funktionsdeklarationen, damit Funktionen verwendet werden können, bevor sie (z.B. weiter unten) definiert werden.

void Akkorde() {
// Bildet die viertaktige Akkordfolge ohne Tonverschiebung.
  DesDur;
  AsDur;
  Bmoll;
  GesDurNormal;
}

Macht nicht was du denkst. So ruft man keine Funktion auf. Der Name einer Funktion alleine ist deren Adresse. Deshalb compiliert das, aber wirft eine Warnung wenn du diese aktivierst

iudicaveritis:
In diesem Code kommt die Fehlermeldung beim Unterprogramm "AkkordeVerschBass" (fast am Ende des Codes). Ich habe den Code kürzen müssen, eigentlich wären die restlichen Unterprogramme und die Variablen natürlich noch definiert.

Kannst Du mal bitte den kompletten Code -- ggfls als Anhang -- irgendwie zur Verfügung stellen, oder sonstwie das so anpassen, das es möglich ist das zu kompilieren und den Fehler zu reproduzieren?
Aus dem, was ich herauslese, ist die schliessende Klammer im Loop existentiell. Siehe auch Tommy56 in #1

Serenifly:
Macht nicht was du denkst. So ruft man keine Funktion auf. Der Name einer Funktion alleine ist deren Adresse. Deshalb compiliert das, aber wirft eine Warnung wenn du diese aktivierst

Das ist so schon nicht falsch, jedoch fehlen da wichtige Infos....

Ich schliesse mich noiasca #3 an.