Hallo Leute,
ich bin ein Arduino Neuling und komme im Moment nicht voran. Ich möchte
einen XY-Plotte programmieren. Bevor ich überhaupt loslege möchte ich
den zwei Antrieben ihre Endposition erlernen lassen (Initialisierung).
Ich dachte diese Funktion setzte ich in die Setup rein da ich sie ja nur
einmal vor der Loop brauche. Das funktioniert aber nicht! :(
Wenn ich meine Funktion in der Loop, mit einer if abfrage ausführe läuft
es Einwand frei. In der Setup tut sich jedoch nichts.
Hier meine Setup Funktion:
void setup()
{
stepperY.setCurrentPosition(0);
stepperX.setCurrentPosition(0);
initSteppers();
}
Muss ich etwas beachten wenn ich eine Funktion in der Setup ausführen
möchte???
Gast
#3558194
Zeig doch mal das ganze Programm. Oder auch dasjenige, so wie es funktionierte.
Hier mal das Ganze. Wie schon gesagt, wenn ich die Funktion initSteppers() so in die Loop nehme funktioniert es.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
Gast
#3558234
Ich weiss jetzt nicht, aber eine leere
void loop()
{
}
könnte allenfalls ein Problem sein.
Setze da zumindest mal was ein.
Ich seh jetzt nicht, wie das in setup() überhaupt jemals funktionieren soll. In loop funktioniert das, weil loop() laufend immer wieder aufgerufen wird. Damit erfolgt die Abfrage auf das Ansprechen der Endschalter und die Aufrufe von run() immer wieder. Aber setup() wird ja nur ein einziges mal aufgerufen und dazu ist dann auch noch die Abfrage auf die Endschalter falsch. Zudem macht ein Aufruf von run() nicht den kompletten Weg, sondern immer nur ein kleines Stück davon. D.h. mit deinem einzelnen Aufruf von run() in setup tut sich da praktisch gesehen überhaupt nichts. Und selbst wenn, überdenk doch mal deine Logik in setup()! Du stellst die Werte für den nächsten Verfahrweg ein, dann überprüfst du die Endschalter und dann fährst du (ohne dich weiter um die Endschalter zu kümmern). Was ist denn das für eine Logik? Erwartet hätte ich eigentlich eine Art Schleifen-konstruktion in Setup. Nach dem Muster
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Eine derartige Struktur hätte ich eigentlich in setup() erwartet. Dein Code sieht aber nicht annähernd so oder so ähnlich aus. Insbesondere fehlt mir die Schleife, die immer wieder Aufrufe von run() macht und bei der die Schleifenbedingung (und dadurch die run() Aufrufe) vom Ansprechen des Endschalters abhängt. In deiner Version funktioniert das deshalb, weil du die Schleife durch die laufenden Aufrufe von loop() automatisch erhältst und in Loop dann prüfst ob die Endschalter angesprochen haben. Das geht in loop(), aber das geht nicht in setup(), weil setup() ja nicht mehrmals aufgerufen wird. Da musst du schon selber eine Schleife rund um die run() Aufrufe legen, die dann den Motor tatsächlich verfahren.
Danke für die ausführlicher Antwort echt Top! Das mit dem run() in der Setup ist mir auch aufgefallen und habe eine Lösung, ähnlich wie deine gefunden. Hier meine Lösung zu dem Problem:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Danke für die Antworten!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.