Fout in code

Hallo allemaal, ik heb deze code geschreven en hij werkt niet, zouden jullie mij kunnen helpen?

#include <legopowerfunctions.h>
#include <SoftwareSerial.h>
SoftwareSerial Seri(2,1);
LEGOPowerFunctions lego(2);
char bluetoothData;
boolean newData = false;
int PWMvalue=0;
int PWMprevvalue=0;
int PWMdirvalue=0;
char TRAIN = RED;

void setup(){
Seri.begin(9600);
}
void loop(){
  recvOneChar();
  controlTrain();
}

void recvOneChar(){
  if (Seri.available() > 0) {
    bluetoothData = Seri.read();
    newData = true;
  }
}

void controlTrain(){
  if (newData == true) {
    switch (bluetoothData){
      case '0':{
        PWMvalue = 0;
        setTrainSpeed();
    }
    break;


      case '1': {
      if (PWMvalue != 8 && PWMvalue != 0){
        PWMprevvalue = PWMvalue;
        PWMvalue = 0;
        setTrainSpeed();
      }
        else{
        PWMvalue = PWMprevvalue;
        setTrainSpeed();
      }
      }
    break;
    case '5':{
      if (TRAIN == RED){
        TRAIN = BLUE;
      }
    
      else{
      if(TRAIN == BLUE){
        TRAIN = RED;
      }
      }
        break;


      case '2':{
        lego.SingleOutput(0,PWM_FLT, TRAIN, CH1);
        delay(500);
        PWMdirvalue = (16 - PWMvalue);
        PWMvalue = PWMdirvalue;
        setTrainSpeed();
      }
        break;


        case '3':{
          if (PWMvalue <=7) {
            PWMvalue--;
            if (PWMvalue<0) {
              PWMvalue = 0);
            }

          }
              else{
              PWMvalue++;
              if (PWMvalue>15){
                lego.SingleOutput(0,0, TRAIN, CH1);
                PWMvalue = 16);
              }

                setTrainSpeed();
              }
                break;
                case '4':{
                  if (PWMvalue >=9){
                    PWMvalue--;
                    if (PWMvalue<9){
                      PWMvalue=9);
                    }

                  }
                      else{
                      PWMvalue ++;
                      if (PWMvalue==8){
                        PWMvalue=7);
                      
                      setTrainSpeed();
                      }
                      }
                      break;
                }
                      newData = false;
        }
    }

    }
                      void setTrainSpeed(){
                      
                        lego.SingleOutput(0, PWMvalue, TRAIN, CH1);
                      }

dit is de error die ik krijg:

exit status 1
'setTrainSpeed' was not declared in this scope

Je accolades zullen wel niet kloppen. Begin maar eens met ctrl-t. Dan wordt de code geformatteerd. Nu is het een zooitje

Hoi wouterpanda, welkom.

Nico heeft groot gelijk met wat hij zegt.

Maar daar zit niet direct de oorzaak van de foutmelding.
Wel zal dit niet gaan werken, dus moet je Nico's opmerkingen ter harte nemen, en oplossen.

De foutmelding is vrij duidelijk, maar je moet natuurlijk wel begrijpen wat die woordcombinatie eigenlijk betekent.
Ik kan de code niet compileren, omdat ik niets met legopowerfunctions doe, en daarom een foutcode zou krijgen die zal verhinderen dat de rest ook nog gecontroleerd zal worden.

In je code maak je gebruik van functies.
Functies maken gebruik van eigen variabelen, die alleen in dat stukje gelden.
Tenzij het globale variabelen betreft.
Bij jou klopt hier iets niet van, waardoor je die foutmelding krijgt.
Dus dat is wat je naast Nico's opmerkingen ook nog op moet lossen.
Jouw sketch kan dus niet met slechts 1 snelle fix worden opgelost.
Maar das mooi, toch.
Heb je weer wat te doen bij dat natte weer van nu.
(of wacht, ehhh..)

Overigens ben ik gewend dat de IDE je meer gedetailleerde informatie geeft.
Zoals om welke regel, en welke plaats op die regel het dan gaat bij de foutmelding.

Zoals Nico al aangaf.

Je controlTrain() mist een }; als een result is void setTrainSpeed() gedefinieerd in controlTrain() en de compiler vindt dat dat niet kan.

Als je logisch inspringt zal je het volgende zien

void controlTrain() {
  ...
  ...

  void setTrainSpeed() {
  ...
  ...
  }

Functie definities moeten altijd beginnen aan het begin van een regel nadat je een auto-format (ctrl-t) hebt gedaan; indien dat niet het geval is heb je meestal een mismatch tussen { en } ergens voor die functie definitie (maar er kunnen andere redenen zijn).