also dann zb "int Joystick(int x) " ?
also dann zb "int Joystick(int x) " ?
Wenn du dem Kompiler sagst, dass ein int zurückgegeben wird, musst du auch dafür sorgen, dass dies IN JEDEM FALL passiert.
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.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;
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)
Lesezeichen