Hallo zusammen.
ich beschäftige mich seit ein paar Tagen mit einem kleinen Roboter, der
aus vier Modellbauservos zusammengebaut wurde.
Die einzelnen "Gelenke" (Servos) habe ich entsprechend der menschlichen
Anatomie bezeichnet (siehe Code).
Da die mitgelieferte Lib des Arduino Uno keine Möglichkeit bietet, die
Servos langsamer/schneller an die gewünschte Position zu fahren, habe
ich eine Routine "moveServo" geschrieben.
Diese Routine verhält sich aber nicht so, wie sie soll.
Ersetze ich z.B. alle Routinenaufrufe mit dem von Arduino
bereitgestellten "SERVO.write(x)", funktioniert alles bestens. Ersetze
ich es durch meine Routine, reagiert nach dem Flashen kein einziges
Servo.
Wo liegt bei mir das Problem im Code?
Wiegesagt, mit .write() funktioniert alles.
Hier der Code:
1 | #include <Servo.h>
|
2 |
|
3 | Servo Drehservo, Hauptarm, Ellenbogen, Hand;
|
4 |
|
5 |
|
6 | void setup()
|
7 | {
|
8 | Drehservo.attach(8);
|
9 | Hauptarm.attach(9);
|
10 | Ellenbogen.attach(10);
|
11 | Hand.attach(11);
|
12 | }
|
13 |
|
14 |
|
15 | void moveServo(int number, int degrees, int speed)
|
16 | {
|
17 | switch (number)
|
18 | {
|
19 | case 0:
|
20 | for(int i = 0; i <= degrees; i++)
|
21 | {
|
22 | Drehservo.write(i);
|
23 | delay(speed);
|
24 | break;
|
25 | }
|
26 |
|
27 | case 1:
|
28 | for(int i = 0; i <= degrees; i++)
|
29 | {
|
30 | Hauptarm.write(i);
|
31 | delay(speed);
|
32 | break;
|
33 | }
|
34 |
|
35 | case 2:
|
36 | for(int i = 0; i <= degrees; i++)
|
37 | {
|
38 | Ellenbogen.write(i);
|
39 | delay(speed);
|
40 | break;
|
41 | }
|
42 |
|
43 | case 3:
|
44 | for(int i = 0; i <= degrees; i++)
|
45 | {
|
46 | Hand.write(i);
|
47 | delay(speed);
|
48 | break;
|
49 | }
|
50 |
|
51 | }
|
52 | delay(20);
|
53 | }
|
54 |
|
55 | void loop()
|
56 | {
|
57 | moveServo(2,100,50);
|
58 | moveServo(3,25,20);
|
59 | delay(4000);
|
60 | }
|
Vielen Dank!