Lageregelung eines Balls auf einer schiene

Guten tag ich habe ein paar Probleme , bei meinem Projekt den ich mache. Ich bin auf einer Abschlussklasse. Ich habe als Projekt eine Lageregelung eines Balls auf einer Schiene bekommen und arbeite schon seit 6 Monaten dran und bekomme immer die selben Fehler Meldungen.
expected constructor, destructor, or type conversion before serial´ und exit status 1 expected unqualified before

hier ist mein Programm :
#include<Wire.h>
#include<Servo.h>
#include<ArduPID.h>
#include<U8glib.h>
#define MUX_Address 0x70 // Adresse des Mulitplexers TCA9548A
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_FAST); // Fast I2C / TWI
ArduPID myController;

double input;
double output;
double setpoint = 10;
double p = 4;
double i = 3;
double d = 2;

int Analog_in = A0;
Servo myservo;
float distance = 50;
float time1;
float distance_previous_error, distance_error;
float period = 0;
char taco [4];
int Sollwert = 0;

void tcaselect(uint8_t i2c_bus) {
if (i2c_bus > 7 ) return;
Wire.beginTransmission (MUX_Address);
Wire.write(1 << i2c_bus);
Wire.endTransmission();
}
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
myservo.attach (9);
myservo.write (125);
pinMode (Analog_in, INPUT);
time1 = millis();
}
DisplayInit()
Serial.begin(250000);

float get_dist(int n)
{
long sum = 0; //Der Befehl "long" speichert den aktuellen Wert
for (int i = 0; i < n; i++) //Befehl für eine Schleife
{
sum = sum + analogRead(Analog_in); //Mit dem Befehl "analogRead" liest der Arduino den Wert vom angegebenen analogen Pin ein und konvertiert von Analog in Digital.
//Addiert die aktuelle Summe mit dem Analogwert des Sensors

}
float adc = sum / n;
float distance_cm = 17569.7 * pow(adc, -1.2062); //Umwandlung von Volt in Zentimeter (Fromel, Datasheet Sensor). Befehl "pow" gibt uns die möglichkeit eine Zahl mit einer Potenz zu multiplizieren.
return (distance_cm); //Der Befehl "return" beendet die Funktion und gibt den Wert an die aufrufende Funktion zurück.
}

{ Serial.begin(115200);
myController.begin(&input, &output, &setpoint, p, i, d);
myController.start();
// myController.reset(); // Used for resetting the I and D terms - only use this if you know what you're doing
// myController.stop(); // Turn off the PID controller (compute() will not do anything until start() is called)
}
void DisplayInit() { //Initialisierung der Displays
for (int i = 0; i < 7; i++) {
tcaselect(i);
u8g.firstPage();
do {
u8g.begin();
} while ( u8g.nextPage() );
}
}
void loop() {
input = analogRead(A0); // Replace with sensor feedback

myController.compute();
myController.debug(&Serial, "myController", PRINT_INPUT | // Can include or comment out any of these terms to print
PRINT_OUTPUT | // in the Serial plotter
PRINT_SETPOINT |
PRINT_BIAS |
PRINT_P |
PRINT_I |
PRINT_D);

analogWrite(3, output); // Replace with plant control signal
}

distance = get_dist(100);
distance_error = Sollwert - distance; //Sollwert - Istwert
PID_p = kp1 * distance_error; //P-Reglung Gleichung (P-Regler kp * den Eingang)
float dist_diference = distance_error - distance_previous_error; //Der Befehl "float" wird benutzt um mit Dezimalzahlen zu rechnen //(Eingang - den vorherigen Eingang) Eingangswert immer aktuell
PID_d = kd3 * ((distance_error - distance_previous_error) / period); //D-Reglung Gleichung (D-Regler kd * Eingang pro periode)

       if (-3 < distance_error && distance_error < 3)                      //Liegt Ball zwischen -3cm und +3cm des Sollwerts wird I-Anteil mitberechnet

{
PID_i = PID_i + (ki2 * distance_error); //I-Reglung Gleichung (Aktueller Wert + ki * den Eingang)
}
else
{
PID_i = 0; //Wenn nicht wird I-Anteil auf 0 gesetzt und dann wird nur PD benutzt.
}

PID_total = PID_p + PID_i + PID_d; //(P Wert + I Wert + D Wert) Differenz
PID_total = map(PID_total, -150, 150, 0, 150); //Der Befehl "map" wandelt den Sensorwert im Bereich 0-1023 um in einen Zahlenwert zwischen 0 und 255

if (PID_total < 20) {
PID_total = 20; //Begrentzt die PID-Reglung auf minimal 20 (minimaler Grenzwert für den Servo)
}
if (PID_total > 160) {
PID_total = 160; //Begrentzt die PID-Reglung auf maximal 160(maximaler Grenzwert für den Servo)
}

myservo.write(PID_total + 30); //Arduino sendet die berechneten Werte an den Servo
distance_previous_error = distance_error; //(Vorheriger Eingang = Eingang)Damit beim Anfang der Schleife dieser Wert benutzt wird um zu rechnen

                      tcaselect(4);                                  //Display aufrufen der am Pin SDA6 und SCL6 des Multiplexer angeschlossen ist

                      u8g.firstPage();                          //Befehl um den ersten Display aufzurufen

do {
u8g.setFont(u8g_font_ncenB10); //Befehl für die Schriftart für den Display für was wir auf dem Display schreiben
u8g.drawStr(2, 35, "KP="); //Position und Text auf dem Display für was wir auf dem Display schreiben
sprintf(taco, "%04d", Kp); //Potentiometer Wert in string umwandeln
u8g.setFont(u8g_font_ncenB10); //Befehl für die Schriftart für den Display für den Potentiometer Wert
u8g.drawStr(32, 35, taco); //Position und Text auf dem Display für den Potentiometer Wert

} while (u8g.nextPage() ); //Befehl um den nächsten Display aufzurufen

delay (20); //20 ms warten bis der nächste Display drankommt

tcaselect(5);

u8g.firstPage();
do {
u8g.setFont(u8g_font_ncenB10);
u8g.drawStr(2, 35, "KI=0,");
sprintf(taco, "%04d", Ki);
u8g.setFont(u8g_font_ncenB10);
u8g.drawStr(45, 35, taco);

} while ( u8g.nextPage() );

tcaselect(6);

u8g.firstPage();
do {
u8g.setFont(u8g_font_ncenB10);
u8g.drawStr(2, 35, "KD=");
sprintf(taco, "%04d", Kd);
u8g.setFont(u8g_font_ncenB10);
u8g.drawStr(45, 35, taco);

} while ( u8g.nextPage() );




tcaselect(7);

u8g.firstPage();
do {
  u8g.setFont(u8g_font_ncenB10);
    u8g.drawStr(2, 35, "Sollwert =");
    sprintf(taco, "%04d", Sollwert);
    u8g.setFont(u8g_font_ncenB10);
    u8g.drawStr(82, 35, taco);


  } while ( u8g.nextPage() );




  delay (20);
}

könnt ihr mir sagen was ich ändern kann oder verbessern muss

danke

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

oh dachte ich wäre im deutschen teil des forums

danke

Hallo heeseungmiep,
guck mal hier.

6 Monate mit ner Fehlermeldung, wie arbeitet man damit?

Einfach STRG-T drücken und schon wird der Code sauber durchformatiert.

Da ist Dein Fehler.

Er wird aber beim Kopieren ins Forum wieder zurückformatiert (linksbündig) und auch sonst verunstaltet, wenn man ihn nicht in Code Tags </> setzt.

Nachträgliche Änderungen sind möglich (mit Edit Button), dann sollte aber der gesamte Code nochmal neu eingefügt werden, weil sonst die kaputte Formatierung erhalten bleibt. Code Tags vor und nach dem Code einfügen nützt nichts, der Code muß innerhalb eines Tags liegen.