- Eleshop Messgeraete Angebote    Werbung      
Ergebnis 1 bis 10 von 16

Thema: Problem mit der Accelstepper.h

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
    Was vor dem Bezeichner (hier: Joystick) steht beschreibt den Rückgabedatentyp der Funktion. Void gibt keinen Wert zurück, double einen double etc. In den Klammern stehen die Eingangsdatentypen. Diese werden ihr zum Ausführungsbeginn mit übergeben. Es kann gar kein, ein oder mehrere Wert(e) verschiedener Datentypen übergeben werden.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    also dann zb "int Joystick(int x) " ?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Wenn du dem Kompiler sagst, dass ein int zurückgegeben wird, musst du auch dafür sorgen, dass dies IN JEDEM FALL passiert.
    Code:
    ...
    if (analog_in0 < -20 || analog_in0 > 20 || analog_in1 < -20 || analog_in1 > 20 ||analog_in2 < -20 || analog_in2 > 20 ||analog_in3 < -20 || analog_in3 > 20 )
    {
    return 1;
    }
    else return 0;
    Und du solltest darüber nachdenken, ob das int x in der Funktion gebraucht wird. Falls nicht, wäre int joystick() die richtige Wahl. Es ist im übrigen Programmierer-Konvention Funktionsbezeichner klein zu schreiben. Kein Muss, aber guter Stil.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Ich hab das damals von C++ noch so in Erinnerung gehabt das ich immer (int x ) schreiben muss , weil sonst kann ich mit den rückgabewerten nichts anfangen (vergleichen ect.) ?

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    jok3r

    Ich hab das damals von C++ noch so in Erinnerung gehabt das ich immer (int x ) schreiben muss , weil sonst kann ich mit den rückgabewerten nichts anfangen (vergleichen ect.) ?
    Das mag für Funktionen wie z.B.
    Code:
    int addiere (int a, int b)
    {
      return a+b;
    }
    gelten.
    Deine Funktion joystick() holt sich aber mit analogRead() Werte 'direkt' von der Hardware.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Wieso wie macht das dann einen Unterschied ? Ich hab erfreuliche Ergebnisse, alles funktioniert soweit hin sehr gut .

    Teaching Modus, Positionen Speed Delay Tool werden in einem Array[][] gespeichert .
    Automatik Modus,alle Werte werden richtig zugeordnet und werden in eine For schleife abgefahren .
    Jetzt wäre mir noch sehr wichtig das Delay ab dem Zeitpunkt beginnt zu laufen wenn alle Schrittmotoren stehen.
    Daher habe ich eine If abfrage am schluss
    int Stepper_routine()
    {

    Stepper0.moveTo(Position[Pos_Display][0]);
    Stepper1.moveTo(Position[Pos_Display][1]);
    Stepper2.moveTo(Position[Pos_Display][2]);
    Stepper3.moveTo(Position[Pos_Display][3]);

    Stepper0.setSpeed(Position[Pos_Display][7]*100);
    Stepper1.setSpeed(Position[Pos_Display][7]*100);
    Stepper2.setSpeed(Position[Pos_Display][7]*100);
    Stepper3.setSpeed(Position[Pos_Display][7]*100);

    Stepper0.runSpeed();
    Stepper1.runSpeed();
    Stepper2.runSpeed();
    Stepper3.runSpeed();

    if ( Stepper0.runSpeed = 0 | Stepper1.runSpeed = 0 | Stepper2.runSpeed = 0 | Stepper3.runSpeed = 0){
    return 1;
    }else {
    return 0;
    }

    }
    Die soll mir einen Wert liefern der im Betrieb die While schleife schließt -->
    void Automatik()
    {

    static int PosWork = 0;



    if (digitalRead(Taster1) == HIGH)
    {

    for (Pos_Display = 1; Pos_Display <= 5; Pos_Display++)
    {

    while (PosWork)
    {


    PosWork = Stepper_routine();




    lcd.setCursor(5, 3); // Display Ausgabe
    lcd.print(Position[Pos_Display][5]) ;
    lcd.setCursor(14, 3);
    lcd.print(Position[Pos_Display][4]);
    lcd.setCursor(6, 2) ;
    lcd.print(Position[Pos_Display][7]);
    lcd.setCursor(16, 2);
    lcd.print(Position[Pos_Display][6]);

    delay(Position[Pos_Display][6] * 1000);
    }


    }


    }


    }
    Leider läuft er jetzt nicht an , ich muss irgendwie davor in die schleife kommen ... nach 2 stunden bin ich nicht auf dem Fehler gekommen -.- . Gruß Dominik
    Geändert von jok3r (26.03.2014 um 18:03 Uhr)

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Ich werde den Code nicht genau analysieren, aber auf den ersten Blick fällt auf:
    ... wenn alle Schrittmotoren stehen.
    Code:
    if ( Stepper0.runSpeed = 0 | Stepper1.runSpeed = 0 | Stepper2.runSpeed = 0 | Stepper3.runSpeed = 0)...
    Müsste aber:
    Code:
    if ( Stepper0.runSpeed == 0 && Stepper1.runSpeed == 0 && Stepper2.runSpeed == 0 && Stepper3.runSpeed == 0)...

    Code:
    Stepper0.setSpeed(Position[Pos_Display][7]*100);
    Stepper1.setSpeed(Position[Pos_Display][7]*100);
    Stepper2.setSpeed(Position[Pos_Display][7]*100);
    Stepper3.setSpeed(Position[Pos_Display][7]*100);
    Sicher, dass alle Stepper die gleiche Geschwindigkeit haben sollen?

    Code:
    lcd.setCursor(16, 2);
    lcd.print(Position[Pos_Display][6]);
    delay(Position[Pos_Display][6] * 1000);
    Das würde ich mir auch noch einmal überlegen.
    Geändert von Sisor (26.03.2014 um 18:27 Uhr)

Ähnliche Themen

  1. Problem mit der Taster
    Von oliver123 im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 25.04.2011, 12:46
  2. [ERLEDIGT] Problem mit der Textbox
    Von TomEdl im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 1
    Letzter Beitrag: 19.03.2011, 14:13
  3. Problem mit der Linienverfolgung
    Von Hohenloher im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 25.03.2010, 20:16
  4. Problem mit der Streckenberechnung
    Von Der_Anfänger im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 16.07.2007, 12:01
  5. Problem mit der Hysterese
    Von Jimmy C im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 07.07.2004, 20:36

Berechtigungen

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

    Werbung      LiFePO4 Speicher Test