Servo stoppen- Arduino?

1 Antwort

hallo,

wenn dann würde ich die schleife "do while" benutzen und in dieser schleife ihm impulse geben nicht alles aufeinmal ..

beispiel:

do
{
x=x+5;
Servo.write(x);
} while ps2buttonpressed;

und sobald du den knopf loslässt wird diese schleife unterbrochen..

Woher ich das weiß:Hobby

Arazhulhd66 
Beitragsersteller
 19.06.2019, 05:54
  • Ok, coole Lösung, denke fkt. auch. Bin aber leider noch nicht ganz zufrieden :D. Wie kann man das dann mit den (analog) Sticks des Controllers machen 1?
  • do {

alles cool bis hier hin

} while Stick nach rechts bewegt

Könntest du vlt. auch wissen, wenn du so einen Joystick programmiert hast, muss ja nicht der PS2 im sein, wäre aber das Beste, weil ich das dann direkt in meinen Code Pasten kann. Danke, an dich! Hoffe auf nächste Antwort!

0
iEdik  19.06.2019, 19:52
@Arazhulhd66

ich hab früher mit einem Arduino ProMicro eine Maus programmiert, dazu hab ich so einen analog-Stick wie bei der playsi gehabt als einzelmodul. dieses Ding gibt dir Analoge Werte aus..da muss man nun entscheiden in welcher Position du etwas ausführen möchtest..voll ausgeschlagen oder nur halb oder ganz wenig..

dann sieht der befehl so aus:

while (AnalogstickwertX >= 512)

also ab halben weg wird dieser befehl dann reagieren..unterhalb wird nichts passieren..

aber bei einem analog-stick würde ich eher die richtung betimmen und geschwindigkeit anhand wie weit du diesen stick drückst..

0
Arazhulhd66 
Beitragsersteller
 19.06.2019, 20:21
@iEdik
do {
x= x+5 
AnalogstickwertX = ps2x.Analog(PSS_RX); //das wäre der rechte Stick (R) in der             .                                       //in der X Achse bewegt
servo.write(x);
}while (AnalogstickwertX >= 512)

Ist das dann Syntaxrichtig? und geht das dann so?

(Der Punkt ist nur dort, weil man sonst keine Leerzeichen ohne ein Zeichen ganz am Anfang setzen kann.)

:D

0
Arazhulhd66 
Beitragsersteller
 19.06.2019, 20:53
@Arazhulhd66

Funktioniert nicht. Hier mein Code (andere Namen der Variablen:

#include <Servo.h>  //For driving the ESCs and Servos
#include <PS2X_lib.h> // Bill Porter's PS2X Library
PS2X ps2x;
Servo dreh;
Servo hoch;
Servo vorne;
Servo greif;


int error = 0;
byte type = 0;
byte vibrate = 0;




int drehx = 0; //Variablen für Servos, also x= x+ 5; servo.write(x);
int hochx = 0;
int vornex = 0;
int greifx = 0;


int drehy = 0; //Variablen für Sticks
int hochy = 0;
int vorney = 0;
int greify = 0;


void setup () {
Serial.begin(9600);
error = ps2x.config_gamepad(13,11,10,12, true, true);
error=0;
type=1;


dreh.attach(2);
hoch.attach(3);
vorne.attach(4);
greif.attach(5);
}
void loop () {
ps2x.read_gamepad();
type = ps2x.readType ();
type = 1;
drehy = ps2x.Analog(PSS_RX);
do {
  drehx = drehx + 5;
  drehy = ps2x.Analog(PSS_RX);
  dreh.write(drehx);
}while (drehy >= 127); //Hälfte von 255--> Stick in Ruhe
delay(50);
}

Wie erwähnt will ich damit ja einen Roboterarm steuern, der geht bei dem Code ordentlich ab.

0
iEdik  19.06.2019, 21:40
@Arazhulhd66

die variablen musst du dir zu deinem code selbst anpassen, ich kann dir nur paar tipps geben wie es gehen könnte..

ach du willst den servo bei y-bewegung drehen..

ich würde da eher die werte skalieren anhand wie weit du den stick drückst, also den servo beschleunigen..und zwar mit der map-funktion

z=map(analogwert,1,255,1,10);

x=x+z;

servo.write(x);

und das ganze in while analogwert >=30 ..weil die reaktion vom servo solll erst ab einem bestimmten wert stattfinden..

0
Arazhulhd66 
Beitragsersteller
 21.06.2019, 22:50
@iEdik

Jetzt lässt du mich ein bisschen im Unklaren... 😁 Was heißt Map? Wie soll ich das jetzt als Schleife schreiben? Kann das Ganze gerade nicht richtig nachvollziehen... :D

0
iEdik  23.06.2019, 09:59
@Arazhulhd66

map ist eine funktion für arduino, wo man einen bereich der werte eingibt, und man bekommt andere werte in anderem Bereich proportional zurück..

ein beispiel:

y=map(x,1,1024,0,100);

also dein joystick (x) gibt dir werte aus zwischen 1 bis 1024..aber du brauchst diese skaliert von 0 bis 100..das ergebnis im beispiel kriegst du in der variablen y..

wenn du den joystick in die mitte drückst, wirst du dann nicht den wert 512 bekommen, sondern 50.

die schleife while kennst du ja schon :)

0