Fahrstuhl hält nicht an, fährt nur hoch



  • Ich habe folgenden Code geschrieben. Allerdings fährt der Fahrstuhl nur hoch: er hält nicht in der Etage an und ich weiß nicht woran es liegt. Außerdem fährt er nur wenn ich eine Taste gerückt halte, er soll aber von alleine fahren.

    Vielen Dank für eure Hilfe.

    #include "model_client/model_client.h"
    #include <string>
    #include <iostream>
    #include <vector>

    using namespace std; /**< Use cout of standard library */

    model_client elevator("127.0.0.1",33001); //connect to the simulator
    //model_client elevator("129.217.219.104",33001); //connect to the real elevator

    double call_level(); /< measures the pressed key */
    double elevator_position(); /
    < measures the position/status of the elevator */
    void moveup();/< Function to move the elevator up */
    void movedown(); /
    < Function to move the elevator down */
    void motorstop();
    void reachdestination1();
    void reachdestination2();
    void reachdestination3();
    void reachdestination4();

    int main()
    {
    cout << "startup\n";

    while(1){/< By calling the elevator the while-loop starts */
    double level;
    double position;
    position=elevator_position(); /
    < get the value of the function */
    level=call_level();

    if(level==position){
    motorstop();
    

    } else {

    if(level==1){
        reachdestination1();
    }
    if(level==2){
        reachdestination2();
    }
    if(level==3){
        reachdestination3();
    }
    if (level==4){
        reachdestination4();
    }
    }
    
    }
    

    }

    double call_level(){
    double level;

    if (elevator.read("TRA1")==1){
       level=1;
    
       }
    if (elevator.read("TRA2")==1){
       level=2;
        }
    if (elevator.read("TRA3")==1){
       level=3;
        }
    if (elevator.read("TRA4")==1){
        level=4;
        }
    return level;
    

    }

    double elevator_position()
    { double position;
    if (elevator.read("TPM1")==1){
    position=1;
    }
    if(elevator.read("TPO1")==1){
    position=1.3;
    }
    if(elevator.read("TPU2")==1){
    position=1.7;
    }
    if(elevator.read("TPM2")==1) {
    position=2;
    }
    if(elevator.read("TPO2")==1){
    position=2.3;
    }
    if(elevator.read("TPU3")==1){
    position=2.7;
    }
    if(elevator.read("TPM3")==1){
    position=3;
    }
    if(elevator.read("TPO3")==1){
    position=3.3;
    }
    if(elevator.read("TPU4")==1){
    position=3.7;
    }
    if(elevator.read("TPM4")==1){
    position=4;
    }
    return position;
    }
    void moveup(){
    elevator.write("MKA",0);
    elevator.write("MKB",1);
    elevator.write("MKE",1);
    }

    void movedown() {
    elevator.write("MKB",0);
    elevator.write("MKA",1);
    elevator.write("MKE",1);
    }

    void motorstop(){
    elevator.write("MKE",0);
    elevator.write("MKB",0);
    elevator.write("MKA",0);
    }

    void reachdestination1(){
    movedown();}

    void reachdestination2(){
    double level;
    level=call_level();
    double position;
    position=elevator_position();
    if(level<position){
    movedown();
    } else {moveup();}
    }

    void reachdestination3(){
    double level;
    level=call_level();
    double position;
    position=elevator_position();
    if(level<position){
    movedown();
    } else {moveup();}
    }

    void reachdestination4(){
    moveup();}



  • weißt du, was ein zustandsautomat ist?



  • Er weiß doch nicht einmal wie code tags funktionieren.



  • Falls dir jemand helfen soll, kürze deinen Code auf das Nötigste. Poste ihn in Codetags. Kontrolliere, ob du ihn vollständig gepostet hast. Das scheint mir aktuell nicht der Fall zu sein. Andernfalls kannst du wahrscheinlich auch einfach einen Debugger nutzen um zu schauen, wie dein Problem zustande kommt. Vielleicht hilft es ja schon den Code Step-by-Step ablaufen zu lassen und dabei deine Variablen zu beobachten.