[Erledigt] Endschalter

Die Funktionen geben true zurück wenn ein Switch betätigt wurde und funktionieren. "Einer ist gedrückt" und "Error: Links" wird auch geprinted [Serial Monitor + LCD] jedoch werden die anderen gar nicht berücksichtigt, das ist doof :frowning:
Woran könnte das liegen?

Szenario: Links wird gedrückt --> Einer ist gedrückt, Links (im Loop)
Rechts wird gedrückt-->Einer ist gedrückt (im Loop)

   //while if als Schleifenkonstruktion, die die einzelnen Bedingungen überprüft
      while(CheckSwitches() == true){ 
          SetSpeed(0);  //Zuallererst die Geschwindigkeit zu Null setzen

          Serial.println("Einer ist gedrückt"); //spft
          delay(1000);
          
          if(CheckLeft() == true){
            lcd.print("Error: Left");
            Serial.println("Links"); //spft


                                  }
           else if(CheckRight == true){
            lcd.print("Error: Right");
                      Serial.println("Rechts"); //spft

            lcd.clear();    
                                      }
            else if(CheckAnschlag == true){
              lcd.print("Anschlag");
              lcd.clear();  
                                          }


                              
                                  }
                                            Serial.println("Keiner"); //spft

Der Sketch macht genau das was du programmiert hast.
Nach der ersten if-Abfrage die TRUE ist springt er raus und kann die anderen ja nicht mehr abfragen.

Ansonsten poste den kompletten Sketch.

Habe aus "else if" jetzt nur "if" gemacht. Bitte beachte auch das zweite Szenario: Nur Rechts ist gedrückt --> "Einer ist gedrückt" folgt und nicht "Error: Right" :confused:

Der gesamte Sketch ist ziemlich lang und funktioniert ansonsten soweit, deswegen weiß ich nicht ob das in diesem Fall zielführend ist. Sonst könnte ich natürlich noch die Definitionen der Funktionen posten.

Marsmann:
Habe aus "else if" jetzt nur "if" gemacht. Bitte beachte auch das zweite Szenario: Nur Rechts ist gedrückt --> "Einer ist gedrückt" folgt und nicht "Error: Right" :confused:

Der gesamte Sketch ist ziemlich lang und funktioniert ansonsten soweit, deswegen weiß ich nicht ob das in diesem Fall zielführend ist. Sonst könnte ich natürlich noch die Definitionen der Funktionen posten.

Meist liegt der Fehler im verborgenen, daher ist das schon zielführend.

Aber lass mich mal raten (mach ich gern).

Es liegt an den Variablen in der if-Abfrage. Deine erste Abfrage arbeitet mit einer Funktion, die beiden anderen mit Variablen.

Wenn's das nicht ist, dann brauchen wir alles. Punkt.

//LCD
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int state = 0; //State in dem sich das Programm derzeit befindet Zu Beginn auf Zero, sprich LCD Eingabe!


//Digital Pin für Knopfdruck
int buttonPin = 6;

//ENDSCHALTER

int sig1 = 22; //Linker Endschalter D22
int sig2 = 23; //Rechter Endschalter D23

  //ENDPUNKT bzw Anschlag
int sig3 = 25; //Postitionsschalter D25

//  ****************************************************************************************
//  ****************************************************************************************

void setup() {

  
//ALLGEMEIN
Serial.begin(9600);


//LCD
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.print("Hello User!");  // Print a message to the LCD. (optional) spft?!

}

void loop(){
      while(CheckSwitches() == true){ 
          SetSpeed(0);  //Zuallererst die Geschwindigkeit zu Null setzen

          Serial.println("Einer ist gedrückt"); //spft
          delay(1000);
          
          if(CheckLeft() == true){
            lcd.print("Error: Left");
            Serial.println("Links"); //spft


                                  }
           if(CheckRight == true){
            lcd.print("Error: Right");
                      Serial.println("Rechts"); //spft

            lcd.clear();    
                                      }
            if(CheckAnschlag == true){
              lcd.print("Anschlag");
              lcd.clear();  
                                          }


                              
                                  }
}





//ENDSCHALTER

// Endschalter soll schützen

    boolean CheckSwitches(){ //Gibt true zurück wenn einer der Schalter gedrückt wurde
  
    int links = digitalRead(sig1);    //States werden gelesen
    int rechts = digitalRead(sig2);
    int anschlag = digitalRead(sig3);
    
    if ((links == LOW) || (rechts == LOW) || (anschlag == LOW) ){ //einer von beiden Endschaltern oder Anschlag wurde gedrückt
      return true;   
                                                                }

      else{
        return false;

          }
                                          
                            }

    boolean CheckAnschlag(){ //Gibt true zurück wenn Positionsanschlag gedrückt wurde
 
    int anschlag = digitalRead(sig3);
    
    if (anschlag == LOW){ //anschlag wurde gedrückt
      return true;   
                        }

      else{
        return false;
          }
                                          
                            } 

    boolean CheckLeft(){ //Gibt true zurück wenn Left gedrückt wurde
 
      int links = digitalRead(sig1);    
      
      if (links == LOW){ //links wurde gedrückt
        return true;   
                        }

      else{
        return false;
          }
                                          
                            } 
    boolean CheckRight(){ //Gibt true zurück wenn Right gedrückt wurde
 
      int rechts = digitalRead(sig2);
      
      if (rechts == LOW){ //rechts wurde gedrückt
        return true;   
                        }

      else{
        return false;
          }
                                          
                            }

Hab jetzt den Code rauskopiert, den das angesprochene Problem betrifft. Hoffentlich hilft das weiter.
Die Funktionen am Ende sind eigentlich alle gleich gehalten, also existiert eigentlich kein Unterschied zwischen Variablen oder Ähnlichem oder?

Hallo,

du musst eine Funktion auch als Funktion ansprechen (aufrufen) und nicht als Variable !

Sieh dir doch bitte mal alle drei if-Abfragen an und vergleiche diese !

Das ist ja peinlich und ich sitze hier seit ner Stunde und verschwende meine/deine Zeit :S:S:S
Ich hab den Code vor Augen nicht mehr gesehen, Danke, danke, danke!!!

Edit: Wie kann man den Topic löschen, das ist ja peinlich grrr

Marsmann:
Das ist ja peinlich und ich sitze hier seit ner Stunde und verschwende meine/deine Zeit :S:S:S
Ich hab den Code vor Augen nicht mehr gesehen, Danke, danke, danke!!!

Edit: Wie kann man den Topic löschen, das ist ja peinlich grrr

Ok, habe gern geholfen.
Wie sagt man so schön "Vier Augen sehen mehr wie zwei".

Schreibe einfach vor den Titel des ersten Post "erledigt".

Danke

Marsmann:
Danke

Alles klar, gerne wieder.

Das ist uns allen schon mal passiert.

Darum gibt es Rubber Debuging und den Ratschlag wenn man nicht weiterkommt eine Pause zu machen.

Grüße Uwe

Wieder ein Fall bei dem eingeschaltete Warnungen gute Hinweise gegeben hätten.

Somewhere\Anschlag\Anschlag.ino:53:23: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

     if (CheckRight == true) {

                       ^

Somewhere\Anschlag\Anschlag.ino:59:26: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

     if (CheckAnschlag == true) {

                          ^