Hab das Problem mit einer for Schleife gelöst, alle 1000 Durchgänge wird Teaching_menue() aufgerufen.
Gibts noch elegantere Möglichkeiten ?
Und danke schon mal bzw wieder.
Die delay() im Teaching_menue hätte mir auch auffallen müssen.
Gruß
Werbung
Hab das Problem mit einer for Schleife gelöst, alle 1000 Durchgänge wird Teaching_menue() aufgerufen.
Gibts noch elegantere Möglichkeiten ?
Und danke schon mal bzw wieder.
Die delay() im Teaching_menue hätte mir auch auffallen müssen.
Gruß
Geändert von jok3r (24.03.2014 um 22:17 Uhr)
Klar, du könntest eine 2.Funktion (z.B.void displayUpdate()) bauen, die nicht alles löscht und neu aufbaut, sondern nur die tatsächlichen Änderungen schreibt.
Lieber nicht![]()
void Joystick(int x)
{
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...........//
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..........//
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...........//
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();
}
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;
}
}
Stimmt das so ? Oben sollte jetzt beim bewegen eines Joysticks eine 1 in Joystick(int x) stehen bzw für x ?
Wobei void steht ja für keinen Wert .... normal schreibt man ja int main(void) oder int main (int x) .... wie sieht das beim Arduino aus ?
logisch wäre int Joystick(int x) oder ?
Geändert von jok3r (25.03.2014 um 19:25 Uhr)
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.
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;
Lesezeichen