For - Schleife für Arduino Servomotor

OP #3117869
Lesenswert?

Hallo zusammen,

ich bin gerade dabei, mich in Arduino einzuarbeiten und habe ein 
Verständnisproblem:

Nachfolgend ist ein kleines Programm aus dem Internet um einen 
Servomotor anzusteuern. Der Motor dreht sich ständig hin und her.

Grund hierfür ist die For-Schleife. Aber warum bricht diese nicht nach 
einer 180°-Drehung ab? Die Schleife prüft doch ständig, ob pos < 180 ist 
und erhöht anschließend den Wert von pos um 1. Irgendwann ist pos = 180 
also nicht kleiner 180. Somit müsste die Schleife abbrechen! Tut sie 
aber nicht, sie fängt erneut von pos=0 an und zählt wieder hoch.


// Festlegen des Servo Pins
int servo = 7;

// Festlegen des Servo Pins
int servo = 7;

// Weitere Variablen für PWM und Drehwinkel (Position)
int pwm;
int pos;

/* Funktion um das Servo zu bewegen. Hier wird die Position
berechnet und der Wert der neuen Position an das Servo
übergeben. */

void servoMove(int servo, int pos){
  //Winkel in Mikrosekunden umrechnen
  pwm = (pos * 11) + 500;

  digitalWrite(servo, HIGH);

  delayMicroseconds(pwm);

  digitalWrite(servo, LOW);

  delay(20);
}

// Initialisieren des Servo Pins
void setup() {
   pinMode(servo, OUTPUT);
}

// Hauptprogramm
void loop() {
  for(pos=0; pos<180; pos++) {
    servoMove(servo, pos);
  }
}
#6054195
Lesenswert?

Weil der Puls 500-2500 µs lang sein muss für 180° Drehwinkel.
Pos ist 0-180, das macht dann (0*11)+500 = 500 bis (180*11)+500=2480µs.
Passt.

Obwohl man normal eher 1000-2000 oder sogar nur 1100-1900 nutzt, manche 
Servos mögen nicht mehr und schlagen an.
Und nach allden Jahren gibt's mittlerweile Servo-libraries die direkt 
den Winkel annehmen.
#6054239
Lesenswert?

Jo sagt's amoi, lest's ihr des a' wos do g'schrieb'n is?

Da wurde überlegt wie man 0-180° in 500-2500µs übersetzt.
Also hat man erstmal die Spanne und den Offset getrennt und kommt auf 
500 Offset und 2000 Spanne.
Die will man auf 180 abbilden, also in ein "digit" 2000/180, was 
zufälligerweise 11,11... ist.
Da man mit Integer rechnet, hat man das großzügig auf 11 gerundet und 
fertig.
Impulslänge in µs ist (Gewünschter Winkel in ganzen Grad* 11) + 500.

Kein Wunder, das hier so oft über Arduino gelästert wird: das ist euch 
zu einfach....
Gast #6054292
Lesenswert?

Jens M. schrieb:
> Man sollte das hier ja auch nicht so rausposaunen, ...
Meine Namenswahl empfindest du als falsch?



-----------
Jens M. schrieb:
> Kein Wunder, das hier so oft über Arduino gelästert wird: das ist euch
> zu einfach....
Alle Begründungen ausgegangen?

Dann ist das wohl nur eine ganz miese Diskiminierungsmasche.
Warum tust du das?
Was versprichst du dir davon?
#6054302
Lesenswert?

Arduino Fanboy D. schrieb:
> Meine Namenswahl empfindest du als falsch?

Usernamen sind mir sowas von egal.
Sieht man an meinem ;)

Arduino Fanboy D. schrieb:
> Alle Begründungen ausgegangen?

Für was?
Die Formel bzw. der Code oben ist so grandios einfach, und ich kann nu 
wirklich nicht gut C.
Aber die Formel da ist was, 6. Klasse?
Das wurde nicht empirisch ermittelt, nur wurde das Problem sehr einfach 
und pragmatisch gelöst:
Zeit ausrechnen, Pin an, Busyloop, Pin aus, Busyloop.

Arduino Fanboy D. schrieb:
> Dann ist das wohl nur eine ganz miese Diskiminierungsmasche.

w0t?
Ich kann Arduino auch nutzen ohne mich drüber aufzuregen.
Wenn es den Job tut, bau ichs ein.
Gibts was anderes, bau ichs anders.
Der Name auf der Schachtel ist mir ebenso egal wie der Username in 
Foren.
Ich bin kein Rassist, aber... ;)
Gast #6054321
Lesenswert?

Nick M. schrieb:
> Dann fehlt es im Ursprungsposting.
Nein.

Nick M. schrieb:
> Aber das strotzt ja sowieso vor "Qualität"
6 Jahre alt, es ist.
Wenn er/sie/es dem Hobby noch frönt, wird er/sie/es sich (hoffentlich) 
weiter entwickelt haben.

Jens M. schrieb:
> Ich bin kein Rassist, aber... ;)
Aber einer welcher mit Schaiße auf Arduino User wirft.

Das Gruppieren von Personen, anhand einer ihrer Eigenschaften, und diese 
Gruppe dann als ganzes zu bewerten, ist für mich die Grundessenz 
rassistischer Denkmuster.

Wie auch immer...
Deine eigene, von dir hoch gelobte Kompetenz, ist sicherlich auch nicht 
vom Himmel gefallen.

Gib ihnen die Zeit, welche du gebraucht hast.
Und ein bisschen mehr, weil sie nicht alle so firm, wie du, sein können.
#6054373
Lesenswert?

Arduino Fanboy D. schrieb:
> Aber einer welcher mit Schaiße auf Arduino User wirft.

eben genau gerade nicht.
zumindest nicht das ich wüsste.

Arduino Fanboy D. schrieb:
> Und ein bisschen mehr, weil sie nicht alle so firm, wie du, sein können.

Genau das isses ja. bin ich nicht, weiß ich auch.

Herr jessas, geh in einen Lebensmittelmarkt deines Vertrauens, kauf eine 
Packung AA und mach die in deinen Ironiedetektor rein.
Die da drin sind scheinen leer zu sein.
Gast #6054633
Lesenswert?

Nick M. schrieb:
> Weil der nicht mal eine
> void main()
> hat.

Wäre es schlimm, wenn es eine int main() wäre?

Die main.cpp von Arduino sieht im wesentlichen so aus:
1
int main(void)
2
{
3
  init();
4
  initVariant();
5
  setup();
6
    
7
  for (;;) {
8
    loop();
9
    if (serialEventRun) serialEventRun();
10
  }
11
  return 0;
12
}
Für den TO dürfte damit auch klar werden, warum seine for-Schleife nach 
dem Erreichen der 180 wieder von vorne anfängt.
Gast #6054658
Lesenswert?

Arduino Fanboy D. schrieb:

> Was hat Arduino damit zu tun, wenn dem Anfänger Wissen fehlt?

Weil eben Arduino verspricht, das auch Unwissende was gebacken bekommen. 
Es ist aber naturgemäß reiner Zufall, ob das dann tatsächlich klappt.

Schuld ist aber nicht der Anfänger, sondern die falschen Propheten, 
dieses unselige, geldgierige, hassenswerte Drecks-Pack.

> Bit du incl. der Geradengleichung auf die Welt gepresst worden?

Naja, jeder hat das in der Schule gelernt. Schätzungsweise 4 oder 5 
Klasse? Wer nichtmal das kann, ist als Programmierer einfach 
grundsätzlich vollkommen ungeeignet. Ende der Ansage!
Gast #6054695
Lesenswert?

c-hater schrieb:
> hassenswerte Drecks-Pack
Wers zuerst gerochen, dem ists aus der Hos gekrochen.

c-hater schrieb:
> Weil eben Arduino verspricht, das auch Unwissende was gebacken bekommen.
Naja...
Schnelle kleine Erfolge sind schon zu erreichen, trotz der doch arg 
komplexen C++ Welt.
Andere Programmierumgebungen stellen sich da gerne etwas querer.

Das Denken wird dennoch beansprucht, wenn es denn etwas weiter gehen 
soll.
Arduino, hin oder her, wird sich das nicht vermeiden lassen.

c-hater schrieb:
> Ende der Ansage!
Eigentlich bin ich recht froh, dass du nicht das Maß der Dinge bestimmen 
darfst.


--

Das einzige, was ich dir zu gute halten könnte, wäre, wenn du mit dir 
selber noch gnadenloser umgehen würdest.
Ist das so?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren