- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 16

Thema: Programm säubern mit vielen void()s in eigenen Tabs

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Ja danke ich glaub ich habs kapiert . Eines noch ich hab mit interrupts ein menü gebastelt . Das ganze funktioniert über if Bedienungen mit denen er dann in die verschiedenen case springt.

    Wenn ich jetzt mehrere voids im case aufrufe kann ich das display nicht mehr bedienen.


    case 1: Teachen_menue();
    joystick();
    break;
    .................................................. .................................................. ...............................

    void Teachen_menue() //Menü Teachen, Display Ausgabe
    { lcd.clear();
    lcd.setCursor(0,0) ;
    lcd.print("---Teaching-Modus---") ;
    lcd.setCursor(0,1) ;
    lcd.print( "x=") ; lcd.print(x) ;
    lcd.setCursor(7,1) ;
    lcd.print( "y=") ; lcd.print(y) ;
    lcd.setCursor(14,1) ;
    lcd.print( "z=") ; lcd.print(z) ;
    lcd.setCursor(0,2) ;
    lcd.print( "Speed=") ; lcd.print(Speed) ;
    lcd.setCursor(10,2);
    lcd.print( "Delay=") ; lcd.print(Delay) ;
    lcd.setCursor(0,3);
    lcd.print( "Tool=") ; lcd.print(Tool) ;
    lcd.setCursor(10,3);
    lcd.print( "Pos=") ; lcd.print(Pos) ;
    delay(500);
    }

    .................................................. .......................
    void Joystick()
    {
    int analog_in0 = (512 - analogRead(ANALOG_IN0));
    int analog_in1 = (512 - analogRead(ANALOG_IN1));
    int analog_in2 = (512 - analogRead(ANALOG_IN2));
    int analog_in3 = (512 - analogRead(ANALOG_IN3));

    int AN0, AN01;
    int AN1, AN11;
    int AN2, AN21;
    int AN3, AN31;

    //.......Stepper1..........//
    if (analog_in0 >= 35 )
    {
    AN0 = exp(analog_in0 / 67);
    Stepper0.setSpeed(AN0) ;
    Stepper0.runSpeed();
    }
    else if (analog_in0 <= -35)
    {
    AN01 = exp(-analog_in0 / 67);
    Stepper0.setSpeed(-AN01) ;
    Stepper0.runSpeed();
    }

    //........Stepper2...........//
    else if (analog_in1 >= 35 )
    {
    AN1 = exp(analog_in1 / 67 );
    Stepper1.setSpeed(AN1) ;
    Stepper1.runSpeed();
    }
    else if (analog_in1 <= -35)
    {
    AN11 = exp(-analog_in1 / 67 );
    Stepper1.setSpeed(-AN11) ;
    Stepper1.runSpeed();
    }

    //..........Stepper3..........//
    else if (analog_in2 >= 35)
    {
    AN2 = exp (analog_in2 / 67);
    Stepper2.setSpeed(AN2) ;
    Stepper2.runSpeed();
    }
    else if (analog_in2 <= -35)
    {
    AN21 = exp (-analog_in2 / 67);
    Stepper2.setSpeed(-AN21) ;
    Stepper2.runSpeed();
    }

    //............Stepper4...........//
    else if (analog_in3 >= 35 )
    {
    AN3 = exp (analog_in3 / 67);
    Stepper3.setSpeed(AN3) ;
    Stepper3.runSpeed();
    }
    else if (analog_in3 <= -35)
    {
    AN31 = exp (-analog_in3 / 67 );
    Stepper3.setSpeed(-AN31) ;
    Stepper3.runSpeed();
    }


    Serial.print( analog_in0 ); Serial.print( ' ' );

    Serial.print( analog_in1 ); Serial.print( ' ' );

    Serial.print( analog_in2 ); Serial.print( ' ' );

    Serial.print( analog_in3 ); Serial.println( "" );
    }


    case ist für mich wenn ich es richtig verstanden habe, ja nichts anderes als eine schleife die er solange abläuft bis ein break kommt oder ein anderer case gewählt wird ?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    case macht nur im Zusammenspiel mit switch Sinn. Es ist keine Schleife.
    Am besten mal Tante Google fragen!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Schon klar , stell mal alles on

    Final:
    #include <LiquidCrystal.h>
    #include <AccelStepper.h>
    #include <Wire.h>

    #define ANALOG_IN0 A0
    #define ANALOG_IN1 A1
    #define ANALOG_IN2 A2
    #define ANALOG_IN3 A3

    LiquidCrystal lcd(34, 36, 38, 40, 42, 44, 46, 48, 50, 52);

    AccelStepper Stepper0(1, 13, 12); //Stepper 1
    AccelStepper Stepper1(1, 7, 6); //Stepper 2
    AccelStepper Stepper2(1, 10, 9); //Stepper 3
    AccelStepper Stepper3(1, 4, 3); //Stepper 4

    const int inputPin_0 = 53; // Input Pin 43 Menü Teachen-Modus
    const int inputPin_1 = 51; // Input Pin 45 Menü Automatik-Modus
    const int inputPin_2 = 49; // Input Pin 47 Menü Justage-Modus


    volatile int state=0; // Variablen, die von Interruptroutinen angefasst werden, sollten "volatile" deklariert werden
    volatile unsigned long lastTime=0; // Zeitpunkt der letzten steigenden Flanke, nötig zum Entprellen

    const int x = 0;
    const int y = 0;
    const int z = 0;
    const int Wahl= 0;
    const int Speed= 0;
    const int Delay= 0;
    const int Tool= 0;
    const int Pos = 1;

    void setup()
    {
    Wire.begin();

    Stepper0.setMaxSpeed(10000);
    Stepper0.setAcceleration(10000);


    Stepper1.setMaxSpeed(10000);
    Stepper1.setAcceleration(10000);


    Stepper2.setMaxSpeed(10000);
    Stepper2.setAcceleration(10000);


    Stepper3.setMaxSpeed(10000);
    Stepper3.setAcceleration(10000);

    pinMode(inputPin_0, INPUT); // Input Deklaration
    pinMode(inputPin_1, INPUT); // Input Deklaration
    pinMode(inputPin_2, INPUT); // Input Deklaration

    attachInterrupt(49, KeyPressed_1, RISING); // 43 ist der Interrupt , bei jeder steigenden Flanke wird keyPressed_0() aufgerufen
    attachInterrupt(51, KeyPressed_2, RISING); // 45 ist der Interrupt , bei jeder steigenden Flanke wird keyPressed_1() aufgerufen
    attachInterrupt(53, KeyPressed_3, RISING); // 47 ist der Interrupt , bei jeder steigenden Flanke wird keyPressed_2() aufgerufen

    lcd.begin(16,4); // 1 ist der Interrupt für Pin 2, bei jeder steigenden Flanke wird keyPressed_1() aufgerufen
    }




    //.........................Interruput Auswertung mit entprellen........................................ .......................//
    void KeyPressed_1(){ // state =0 , falls mindestens 100ms seit der letzten Flanke vergangen sind
    unsigned long now = millis();
    if (now - lastTime > 100){ // entprellen
    state=1 ;

    }
    lastTime=now;
    }

    void KeyPressed_2(){ // state =1 , falls mindestens 100ms seit der letzten Flanke vergangen sind
    unsigned long now = millis();
    if (now - lastTime > 100){ // entprellen
    state=2 ;

    }
    lastTime=now;
    }

    void KeyPressed_3(){ // state = 2 , falls mindestens 100ms seit der letzten Flanke vergangen sind
    unsigned long now = millis();
    if (now - lastTime > 100){ // entprellen
    state=3 ;

    }
    lastTime=now;
    }







    //..................................MENÜ............ .................................................. ......................//
    void loop()
    {


    switch(state)
    {
    case 0:
    { lcd.clear();

    lcd.setCursor(0,0) ;
    lcd.print(">>>>>>>Robotik<<<<<<") ;
    lcd.setCursor(0,1) ;
    lcd.print("Projektarbeit2014 by") ;
    lcd.setCursor(0,2) ;
    lcd.print("Kevin Krause") ;
    lcd.setCursor(0,3) ;
    lcd.print("Dominik Loher") ;


    delay(10000);
    state=1;
    }

    case 1: Teachen_menue();
    Joystick();
    break;
    case 2: Automatik();
    break;
    case 3: Justage();
    break;

    }
    }
    Display:

    void Teachen_menue() //Menü Teachen, Display Ausgabe
    { lcd.clear();
    lcd.setCursor(0,0) ;
    lcd.print("---Teaching-Modus---") ;
    lcd.setCursor(0,1) ;
    lcd.print( "x=") ; lcd.print(x) ;
    lcd.setCursor(7,1) ;
    lcd.print( "y=") ; lcd.print(y) ;
    lcd.setCursor(14,1) ;
    lcd.print( "z=") ; lcd.print(z) ;
    lcd.setCursor(0,2) ;
    lcd.print( "Speed=") ; lcd.print(Speed) ;
    lcd.setCursor(10,2);
    lcd.print( "Delay=") ; lcd.print(Delay) ;
    lcd.setCursor(0,3);
    lcd.print( "Tool=") ; lcd.print(Tool) ;
    lcd.setCursor(10,3);
    lcd.print( "Pos=") ; lcd.print(Pos) ;
    delay(500);
    }


    void Automatik() //Menü Automatik, Display Ausgabe
    { lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("--Automatik-Modus--");
    lcd.setCursor(0,1);
    lcd.print( "x=") ; lcd.print(x) ;
    lcd.setCursor(7,1);
    lcd.print( "y=") ; lcd.print(y) ;
    lcd.setCursor(14,1);
    lcd.print( "z=") ; lcd.print(z) ;
    lcd.setCursor(0,2);
    lcd.print( "Speed=") ; lcd.print(Speed) ;
    lcd.setCursor(10,2);
    lcd.print( "Delay=") ; lcd.print(Delay) ;
    lcd.setCursor(0,3);
    lcd.print( "Tool=") ; lcd.print(Tool) ;
    lcd.setCursor(10,3);
    lcd.print( "Pos=") ; lcd.print(Pos) ;
    delay(500);
    }


    void Justage() //Menü Justage, Display Ausgabe
    { lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("---Justage-Modus---");
    lcd.setCursor(0,1);
    lcd.print( "x=") ; lcd.print(x) ;
    lcd.setCursor(7,1);
    lcd.print( "y=") ; lcd.print(y) ;
    lcd.setCursor(14,1);
    lcd.print( "z=") ; lcd.print(z) ;
    delay(500);
    }
    joystick:
    void Joystick()
    {
    int analog_in0 = (512 - analogRead(ANALOG_IN0));
    int analog_in1 = (512 - analogRead(ANALOG_IN1));
    int analog_in2 = (512 - analogRead(ANALOG_IN2));
    int analog_in3 = (512 - analogRead(ANALOG_IN3));

    int AN0, AN01;
    int AN1, AN11;
    int AN2, AN21;
    int AN3, AN31;

    //.......Stepper1..........//
    if (analog_in0 >= 35 )
    {
    AN0 = exp(analog_in0 / 67);
    Stepper0.setSpeed(AN0) ;
    Stepper0.runSpeed();
    }
    else if (analog_in0 <= -35)
    {
    AN01 = exp(-analog_in0 / 67);
    Stepper0.setSpeed(-AN01) ;
    Stepper0.runSpeed();
    }

    //........Stepper2...........//
    else if (analog_in1 >= 35 )
    {
    AN1 = exp(analog_in1 / 67 );
    Stepper1.setSpeed(AN1) ;
    Stepper1.runSpeed();
    }
    else if (analog_in1 <= -35)
    {
    AN11 = exp(-analog_in1 / 67 );
    Stepper1.setSpeed(-AN11) ;
    Stepper1.runSpeed();
    }

    //..........Stepper3..........//
    else if (analog_in2 >= 35)
    {
    AN2 = exp (analog_in2 / 67);
    Stepper2.setSpeed(AN2) ;
    Stepper2.runSpeed();
    }
    else if (analog_in2 <= -35)
    {
    AN21 = exp (-analog_in2 / 67);
    Stepper2.setSpeed(-AN21) ;
    Stepper2.runSpeed();
    }

    //............Stepper4...........//
    else if (analog_in3 >= 35 )
    {
    AN3 = exp (analog_in3 / 67);
    Stepper3.setSpeed(AN3) ;
    Stepper3.runSpeed();
    }
    else if (analog_in3 <= -35)
    {
    AN31 = exp (-analog_in3 / 67 );
    Stepper3.setSpeed(-AN31) ;
    Stepper3.runSpeed();
    }


    Serial.print( analog_in0 ); Serial.print( ' ' );

    Serial.print( analog_in1 ); Serial.print( ' ' );

    Serial.print( analog_in2 ); Serial.print( ' ' );

    Serial.print( analog_in3 ); Serial.println( "" );
    }

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Ohne geschweifte Klammern:
    Code:
    void loop()
    {
      switch(state)
      {
        case 0:
          lcd.clear();
          lcd.setCursor(0,0) ;
          lcd.print(">>>>>>>Robotik<<<<<<") ;
          lcd.setCursor(0,1) ;
          lcd.print("Projektarbeit2014 by") ;
          lcd.setCursor(0,2) ;
          lcd.print("Kevin Krause") ;
          lcd.setCursor(0,3) ;
          lcd.print("Dominik Loher") ;
    
          delay(10000);        // 10 Sekunden? Ernsthaft?
          state = 1;
                               // kein break -> läuft in den case 1!
        case 1: 
          Teachen_menue();
          Joystick();
          break;
    
        case 2: 
          Automatik();
          break;
    
        case 3: 
          Justage();
          break;
      }//END_SWITCH
    }//END_LOOP

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Ohje diese Anfängerfehler ... Aber das Problem besteht weiterhin, das Menü funktioniert nicht mehr wenn
    case 1:
    Teachen_menue();
    Joystick();
    break;
    lösche ich Joystick() gehts wieder...

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Klappts denn ohne Auslagern?

    Hier eine vereinfachte Version:
    Code:
    void Joystick()
    {
      int analog_in0 = (512 - analogRead(ANALOG_IN0));
      int analog_in1 = (512 - analogRead(ANALOG_IN1));
      int analog_in2 = (512 - analogRead(ANALOG_IN2));
      int analog_in3 = (512 - analogRead(ANALOG_IN3));
    
      //.......Stepper1..........//
      if ( analog_in0 <= -35 || analog_in0 >= 35)
      {
        Stepper0.setSpeed(exp(analog_in0 / 67)) ;
        Stepper0.runSpeed();
      }  
      //.......Stepper1..........//
      if ( analog_in1 <= -35 || analog_in1 >= 35)
      {
        Stepper1.setSpeed(exp(analog_in1 / 67)) ;
        Stepper1.runSpeed();
      }
      //.......Stepper2..........//
      if ( analog_in2 <= -35 || analog_in2 >= 35)
      {
        Stepper2.setSpeed(exp(analog_in2 / 67)) ;
        Stepper2.runSpeed();
      }  
      //.......Stepper3..........//
      if ( analog_in3 <= -35 || analog_in3 >= 35)
      {
        Stepper3.setSpeed(exp(analog_in3 / 67)) ;
        Stepper3.runSpeed();
      }
      // Ausgabe im Serial Monitor
      Serial.print( analog_in0 ); Serial.print( ' ' );
      Serial.print( analog_in1 ); Serial.print( ' ' );
      Serial.print( analog_in2 ); Serial.print( ' ' );
      Serial.println( analog_in3 ); 
    }

Ähnliche Themen

  1. Unklarheit mit void Funktionen
    Von super-robman im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 29.08.2011, 19:01
  2. problem mit erstem eigenen programm
    Von rocketman123 im Forum Asuro
    Antworten: 18
    Letzter Beitrag: 03.10.2007, 18:43
  3. Thermometer mit vielen DS18S20
    Von 1100101 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.05.2006, 22:19
  4. anfänger mit vielen fragen =)
    Von chrikumo im Forum Motoren
    Antworten: 8
    Letzter Beitrag: 03.06.2005, 15:12
  5. Vielen, vielen Dank
    Von Weisse1 im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 07.12.2004, 16:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress