Probleme mit der else without if Fehlermeldung

Habe im folgenden Programm einen Problem mit der else without Fehlermeldung und kann das Problem nicht finden.

#include <Servo.h>

int absetzenPin = 3; //absetzen an Pin 3 angeschlossen
int aufnahmePin = 4; //aufnahme an Pin 4 angeschlossen
int sabfragePin = 7; //sabfrage an Pin 7 angeschlossen
int absetzenStatus;
int aufnahmeStatus;
int sabfrageStatus;
Servo pumpe;
Servo stellzylinder;
Servo scherenheber;
Servo sicherungsstangen;
Servo druecker;
Servo fuehrungsstangen;
const int LED1 = 13;

void setup()
{
pinMode(absetzenPin, INPUT); //absetzenPin (Pin 3) wird als INPUT definiert
pinMode(aufnahmePin, INPUT); //aufnahmePin (Pin 4) wird als INPUT definiert
pinMode(sabfragePin, INPUT); //sabfragePin (Pin 7) wird als INPUT definiert
pinMode(LED1,OUTPUT);
pumpe.attach(14); //Servomotor wurde an Pin 14 angeschlosse
pumpe.write(20); //Dreht nach links
stellzylinder.attach(12);
stellzylinder.write(15);
scherenheber.attach(11);
scherenheber.write(90);
sicherungsstangen.attach(10);
sicherungsstangen.write(90);
druecker.attach(9);
druecker.write(90);
fuehrungsstangen.attach(8);
fuehrungsstangen.write(90);
delay(50);
}

void loop()
{
delay (3000);
absetzenStatus = digitalRead(absetzenPin);
if (absetzenStatus == 1)
{
pumpe.write(35); //Dreht nach links
stellzylinder.write(150);
sicherungsstangen.write(70);
scherenheber.write(70);
digitalWrite(LED1,LOW);
delay(50);
return;
}

aufnahmeStatus = digitalRead(aufnahmePin);
if (aufnahmeStatus == 1)
digitalWrite(LED1,HIGH);
{
pumpe.write(45); //Dreht nach rechts
scherenheber.write(110);
sicherungsstangen.write(110);
druecker.write(110);
fuehrungsstangen.write(110);
stellzylinder.write(150);

delay(50);
return;
}

scherenheber.write(90); //Dreht nach n

sabfrageStatus = digitalRead (sabfragePin);
else if (sabfrageStatus == 1)

fuehrungsstangen.write(90);
druecker.write(90);
sicherungsstangen.write(90);
stellzylinder.write(7);
pumpe.write(9);
digitalWrite(LED1,HIGH);
delay(200);
return;
}

Mit freundlichem Gruß
Crazydiver

Kein Wunder, da passt ja garnichts.Armer Code, das hat er nicht verdient!

Schwierig das zu korrigieren...

Schau mal in der Referenz nach else - Arduino Reference und verwende bitte Code Tags.

if (aufnahmeStatus == 1)
   digitalWrite(LED1,HIGH);
{
   ....
}
scherenheber.write(90);
sabfrageStatus = digitalRead (sabfragePin);
else if (sabfrageStatus == 1)

Fällt da was auf?

if (aufnahmeStatus == 1)
digitalWrite(LED1,HIGH);

  {
  pumpe.write(45); //Dreht nach rechts
  scherenheber.write(110);
  sicherungsstangen.write(110);
  druecker.write(110);
  fuehrungsstangen.write(110);
  stellzylinder.write(150);

  delay(50);
  return;
  }

scherenheber.write(90); //Dreht nach n

sabfrageStatus = digitalRead (sabfragePin);

 else if (sabfrageStatus == 1)

Ich sehe da eine geschwungene Klammer die nichts mit dem IF zu tun hat und dann ein ELSEIF das in der Luft ist.

Grüße Uwe

Eure Lösungen sind zwar gut aber sagen nichts aus wo genau der Fehler liegt.

MfG
Crazydiver

Doch, das tun sie!

Leider kannst du damit offensichtlich nichts anfangen!
Schade....

Damit du die Antworten verstehen kannst, solltest du lernen, wie das IF/ELSE in der Arduino Umgebung funktioniert.
Das können wir dir nicht abnehmen.

Hier mal ein Anfang: IF ELSE

"wo genau der Fehler liegt" ist nicht zu beantworten. Dass der Compiler dir "else without if" meldet, ist kein Fehler, sondern ein richtiger Hinweis, dass du einen ungültigen sketch eingetippt hast.

Ein Vorschlag: lösche die 4 Buchstabenelse in der Zeile die angemeckert wird. Danach ist diese Meldung jedenfalls weg.
Ob der Sketch danach übersetzt werden kann und gar das tut was du dir vorstellst, weiss natürlich keiner.

Der erste weitere Fehler ist, dassaufnahmeStatusundefiniert ist, wenn man mal gutmütig rät, dass dein Schnipsel ins Innere einer Funktion gehört.

"wo genau der Fehler liegt" ist nicht zu beantworten.

Klar ist das zu beantworten und wurde auch beantwortet. Ich habe versucht in darauf hinzuweisen. Uwe hat es etwas deutlicher gesagt.

Vor dem else kann entweder eine Zeile oder ein { } Block kommen. Aber nicht ein { } Block und mehrere Anweisungen.

Das hier hatte ich mir mal vor Urzeiten abgespeichert.. ohne Gewähr. :stuck_out_tongue:

if(Bedingung)       // Wenn Bedingung zutrifft, dann Anweisung.
{
  Anweisung;
}

  
if(Bedingung)       // Wenn Bedingung zutrifft, dann Anweisungen.
{
  Anweisung1;
  Anweisung2;
}


  
max = a > b ? a : b;  // Wenn a größer als b ist, gilt max = a, ansonsten max = b



if (Bedingung_1)
{
  Anweisung_1;       // Wenn Bedingung_1 zutrifft, dann Anweisung_1..
}
else
{
  Anweisung_2;       // ..ansonsten wird Anweisung_2 ausgefürt.
}


  
if (Bedingung_1)       // Wenn Bedingung_1 zutrifft, dann Anweisung_1..
{      
  Anweisung_1;
}
else if(Bedingung_2)  // ..ansonsten wenn Bedingung_2 zutrifft, dann Anweisung_2.
{
  Anweisung_2;
}
else                 // Ansonsten Anweisung_3.
{                
  Anweisung_3;
}



if (Bedingung_1)    // Wenn Bedingung_1 zutrifft, dann prüfen, ob Bedingung_2 auch zutrifft.
if (Bedingung_2)    // Wenn Bedingung_2 auch zutrifft, dann Anweisung1.
Anweisung_1;
else                // ..ansonsten Anweisung_2
Anweisung_2;

                    // Ohne (!) Klammern gehört das "else" immer (!) zu dem letzten "if".
                    // Sprich: Hier wird Anweisung2 ausgeführt, wenn Bedingung2 nicht erfüllt ist.


if(Bedingung1)      // Wenn Bedingung1 zutrifft, dann prüfen, ob Bedingung2 auch zutrifft.
{
  if(Bedingung2)    // Wenn Bedingung2 auch zutrifft, dann Anweisung1.
  Anweisung1;
}
else                // Ansonsten Anweisung2.
Anweisung2;

                    // Mit Klammern gehört das "else" immer zu dem letzten "if".
                    // Sprich: Hier wird Anweisung2 ausgeführt, wenn Bedingung1 nicht erfüllt ist.

Gruß Chris

Crazydiver:
Eure Lösungen sind zwar gut aber sagen nichts aus wo genau der Fehler liegt.

Der Fehler liegt eben nicht “genau irgendwo”, sondern es gibt an mehreren Stellen Probleme (Fehler) und Unklarheiten (“was könnte wohl damit gemeint sein?”).
Wie bereits erwähnt solltest du dir die Syntax zu if und else genauer ansehen.

Kannst du beschreiben, was das Programm machen soll?

DU bist …
… Du kapierst …

Aus pädagogischer Sicht ist das kontraproduktiv.

Sinn macht es, wenn DU den Gegenüber vertreiben möchtest, oder eine Eskalationskette beginnen willst.
Aber dann nimm mich!
Stehe stets zu einem handfesten Streit bereit, wenn es denn von DIR gewünscht wird.

hi,

naja, wir alle wissen, daß jurs manchmal ein wenig, nennen wir's mal rüde, sein kann.

ein neuling weiß das nicht, und dann isser gleich verschreckt und erfährt nie, daß das hier das netteste forum der welt ist.

das problem von crazydiver ist ja eines, das wir immer wieder sehen: es fehlen die grundkenntnise. aus einem funktionierenden beispiel wird ein umfangreicher sketch zusammengestoppelt, aber der funktioniert dann nicht, weil zum zusammenstoppeln eben diese grundkenntnisse nötig sind.

am besten nicht mit servos anfangen, sondern mit ein paar LEDs, und wenn Du dann bei einem ampelschaltung mit drei LEDs und einem taster für fußgänger angelangt bist, sind auch servos kein problem mehr.

gruß stefan