- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
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
    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!

  2. #2
    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( "" );
    }

  3. #3
    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

  4. #4
    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...

  5. #5
    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
  •  

LiFePO4 Speicher Test