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.) ?
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.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.) ?
gelten.Code:int addiere (int a, int b) { return a+b; }
Deine Funktion joystick() holt sich aber mit analogRead() Werte 'direkt' von der Hardware.
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 schlussDie soll mir einen Wert liefern der im Betrieb die While schleife schließt -->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;
}
}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ß Dominikvoid 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);
}
}
}
}
Geändert von jok3r (26.03.2014 um 17:03 Uhr)
Ich werde den Code nicht genau analysieren, aber auf den ersten Blick fällt auf:
... wenn alle Schrittmotoren stehen.Müsste aber:Code:if ( Stepper0.runSpeed = 0 | Stepper1.runSpeed = 0 | Stepper2.runSpeed = 0 | Stepper3.runSpeed = 0)...
Code:if ( Stepper0.runSpeed == 0 && Stepper1.runSpeed == 0 && Stepper2.runSpeed == 0 && Stepper3.runSpeed == 0)...
Sicher, dass alle Stepper die gleiche Geschwindigkeit haben sollen?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);
Das würde ich mir auch noch einmal überlegen.Code:lcd.setCursor(16, 2); lcd.print(Position[Pos_Display][6]); delay(Position[Pos_Display][6] * 1000);
Geändert von Sisor (26.03.2014 um 17:27 Uhr)
Ja vorerst sollten sie die gleich Geschwindigkeit bekommen. Oh sry ja das wurde schon geändert es soll nicht Pos_Display sondern Delay_Display heißen.
zuDie idee ist wenn einer der Schrittmotoren noch aktiv ist , dann soll die While schleife eine 1 erhalten ein verlassen sollte erst möglich sein wenn die Motoren stehen. Gruß
- - - Aktualisiert - - -
Laut Accel Stepper liefert Stepper0.runSpeed() --> eine 1 wenn er in Bewegung ist . Ich hab mir dabei gedacht das ich diese ein einfach abfragen kann in dem ich die Funktion mit etwas vergleiche .Sie liefert eine Boolean
Geändert von jok3r (26.03.2014 um 18:33 Uhr)
Die Aussage
als C-Code:wenn einer der Schrittmotoren noch aktiv ist , dann soll die While schleife eine 1 erhalten
oder umgedrehte Logik, identisches Ergebnis:Code:if (stepper0.runSpeed || Stepper1.runSpeed || Stepper2.runSpeed || Stepper3.runSpeed) return 1; else return 0;
Geändert von Sisor (26.03.2014 um 18:59 Uhr)
ja stimmt schon hast recht ... es muss auch noch eine do while schleife werden , sonst komme ich nie rein . Gruß
Lesezeichen