Eisenbahn

StartHardware-Forum Eisenbahn

Schlagwörter: 

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)
  • Autor
    Beiträge
  • #6637
    Hans-Peter
    Teilnehmer

    Moin zusammen,
    ich brauche noch einmal Hilfe,
    Ab der 2. IF Anweisung läuft der Test nicht mehr weiter. Fehlermeldungen:

    ===========================

    Miniclub_Version_1:119:1: error: stray '@' in program
    
     @if (digitalRead(SG_2)==HIGH){
    
     ^
    
    Miniclub_Version_1:119:2: error: expected unqualified-id before 'if'
    
     @if (digitalRead(SG_2)==HIGH){
    
      ^~
    
    Miniclub_Version_1:127:5: error: expected unqualified-id before 'else'
    
       } else {
    
         ^~~~
    
    Miniclub_Version_1:131:3: error: expected unqualified-id before 'while'
    
       while (SG_3=LOW)
    
       ^~~~~
    
    Miniclub_Version_1:136:3: error: expected declaration before '}' token
    
       }
    
       ^
    
    exit status 1

    stray ‚@‘ in program
    ====================================================
    So sieht das Programm aus:
    ====================================================

    //Variablendefinition
    
    //Gleis bestromen Pin 1 bis 10
    //Gleis 1 im Schattenbahnhof aussen
    int Gleis_1=1;
    //Gleis 2 im Schattenbahnhof innen
    int Gleis_2=2;
    //Gleis 3 im Bahnhof aussen
    int Gleis_3=3;
    //Gleis 4 im Schattenbahnhof innen
    int Gleis_4=4;
    //Gleis 5 Innengleis
    int Gleis_5=5;
    //Gleis 6 Abstellgleis im Schattenbahnhof
    int Gleis_6=6;
    //Ausßengleis bestromen
    int Aussengleis=7;
    
    //Weichen Schalten Pin 11-15
    //Weichen aus Gleis 1 schalten 
    int Weichen_Gleis_1=11;
    //Weichen aus Gleis 2 schalten
    int Weichen_Gleis_2=12;
    //Weichen aus Gleis 3 schalten
    int Weichen_Gleis_3=13;
    //Weichen aus Gleis 4 schalten
    int Weichen_Gleis_4=14;
    
    //Schaltgleise Pin 21-25
    //Schaltgleis Gleis 1
    int SG_1=21;
    //Schaltgleis Gleis 2
    int SG_2=22;
    //Schaltgleis Gleis 3
    int SG_3=23;
    //Schaltgleis Gleis 4
    int SG_4=24;
    //Schaltgleis Gleis 5
    int SG_5=25;
    
    void setup() {
      // Pindefinitionen
      pinMode(Gleis_1, OUTPUT);
      pinMode(Gleis_2, OUTPUT);
      pinMode(Gleis_3, OUTPUT);
      pinMode(Gleis_4, OUTPUT);
      pinMode(Gleis_5, OUTPUT);
      pinMode(Gleis_6, OUTPUT);
      pinMode(Aussengleis, OUTPUT);
      pinMode(Weichen_Gleis_1, OUTPUT);
      pinMode(Weichen_Gleis_2, OUTPUT);
      pinMode(Weichen_Gleis_3, OUTPUT);
      pinMode(Weichen_Gleis_4, OUTPUT);
      pinMode(SG_1, INPUT);
      pinMode(SG_2, INPUT);
      pinMode(SG_3, INPUT);
      pinMode(SG_4, INPUT);
      pinMode(SG_5, INPUT);
    
      //Startkonfiguartion
      //Gleis 1 und 2 im Schattenbahnhof belegt
      //Gleis 3 belegt
      //Gleis 5 im Bahnhof belegt
    
      // Weichen Grundstellung schalten
      //Weichen zum befahren von Gleis 1 schalten
    digitalWrite(Weichen_Gleis_1, HIGH);
    delay(500);
      //Weichen zum befahren von Gleis 4 schalten
    digitalWrite(Weichen_Gleis_4, HIGH);
    delay(500);
      //Gleis 5 bestromen
    digitalWrite(Gleis_5, HIGH);
      //Aussengleis 7 bestromen
    digitalWrite(Aussengleis, HIGH);
    
      //Startaktion
      //Gleis 1 für 2 sek. bestromen
    digitalWrite(Gleis_1, HIGH);
    delay(2000);
      //Gleid 4 für einfahrenden Zug bestromen
    digitalWrite(Gleis_4, HIGH);
    
    }
    
    void loop() {
      
      //Programmablauf:
      //Status: Gleis 1 - 1
      //        Gleis 2 - 1
      //        Gleis 3 - 1
      //        Gleis 4 - 0  
      //(0) Zug läuft von Gleis 1 in Gleis 4 (SG_4=HIGH) ein, bleibt stehen, schaltet die Weichen für Gleis 2 und 3 und bestromt Gleis 2
    if (digitalRead(SG_4)==HIGH){
        digitalWrite(Gleis_4, LOW);
        digitalWrite(Weichen_Gleis_3, HIGH);
        delay(500);
        digitalWrite(Weichen_Gleis_2, HIGH);
        delay(500);
        digitalWrite(Gleis_3, HIGH);
        digitalWrite(Gleis_2, HIGH);
      } else {
        digitalWrite(Gleis_6, LOW);
      }
      //Zug fährt von Gleis 3 nach Gleis 2. Programmablauf anhalten, bis der Zug in Gleis 2 einläuft (SG_2=HIGH)
      while (SG_2=LOW)
        delay(250);
      }
          
    
      
      //(1) Zug läuft von Gleis 4 in Gleis 2 ein (SG_2=HIGH), bleibt stehen, schaltet die Weichen für Gleis 1 und 4 und bestromt Gleis 1
      //Status: Gleis 1 - 1
      //        Gleis 2 - 0
      //        Gleis 3 - 1
      //        Gleis 4 - 1   
    @if (digitalRead(SG_2)==HIGH){
        digitalWrite(Gleis_4, LOW);
        digitalWrite(Weichen_Gleis_4, HIGH);
        delay(500);
        digitalWrite(Weichen_Gleis_1, HIGH);
        delay(500);
        digitalWrite(Gleis_3, HIGH);
        digitalWrite(Gleis_2, HIGH);
      } else {
        digitalWrite(Gleis_6, LOW);
      }
      //Zug fährt von Gleis 1 nach Gleis 3. Programmablauf anhalten, bis der Zug in Gleis 3 einläuft (SG_3=HIGH)
      while (SG_3=LOW)
        delay(250);
    
      
      }

    =======================================
    Die 1. und 2. anweisung sehen doch gleich aus. Wo ist der Fehler?

    Danke für eure Hilfe.

    • Dieses Thema wurde geändert vor 2 weeks, 4 days von Stefan Hermann.
    #6638
    Hans-Peter
    Teilnehmer

    das @ habe ich gelöscht
    -> @if (digitalRead(SG_2)==HIGH){
    die Zeile sieht jetzt so aus
    -> if (digitalRead(SG_4)==HIGH){

    Das ist die Fehlermeldung dazu:

    Miniclub_Version_1:119:1: error: expected unqualified-id before ‚if‘

    if (digitalRead(SG_2)==HIGH){

    ^~

    Miniclub_Version_1:127:5: error: expected unqualified-id before ‚else‘

    } else {

    ^~~~

    Miniclub_Version_1:131:3: error: expected unqualified-id before ‚while‘

    while (SG_3=LOW)

    ^~~~~

    Miniclub_Version_1:136:3: error: expected declaration before ‚}‘ token

    }

    ^

    exit status 1
    expected unqualified-id before ‚if‘

    #6639
    Hans-Peter
    Teilnehmer

    ich habs gefunden, gut wenn man drüber spricht.

    while (SG_2=LOW){
    delay(250);
    }

    //(1) Zug läuft von Gleis 4 in Gleis 2 ein (SG_2=HIGH), bleibt stehen, schaltet die Weichen für Gleis 1 und 4 und bestromt Gleis 1
    //Status: Gleis 1 – 1
    // Gleis 2 – 0
    // Gleis 3 – 1
    // Gleis 4 – 1
    if (digitalRead(SG_2)==HIGH){
    digitalWrite(Gleis_4, LOW);
    digitalWrite(Weichen_Gleis_4, HIGH);
    delay(500);
    digitalWrite(Weichen_Gleis_1, HIGH);
    delay(500);
    digitalWrite(Gleis_3, HIGH);
    digitalWrite(Gleis_2, HIGH);
    } else {
    digitalWrite(Gleis_6, LOW);
    }
    //Zug fährt von Gleis 1 nach Gleis 3. Programmablauf anhalten, bis der Zug in Gleis 3 einläuft (SG_3=HIGH)
    while (SG_3=LOW){
    delay(250);
    }

    }

    Danke :-)

    #6641
    Stefan Hermann
    Keymaster

    Ja cool, dass du es gefunden hast. Eine Anmerkung: Das einfache Gleichheitszeichen weist einen Wert zu. D.h. in diesem Fall:
    while (SG_3=LOW){ wird SG_3 auf LOW gesetzt. Somit ist die Abfrage wahr. Du musst wahrscheinlich eher das doppelte Gleichheitszeichen verwenden: while (SG_3==LOW){ Jetzt wird geprüft, ob SG_3 LOW ist oder nicht.

    Liebe Grüße :-)

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.