Forum: Mikrocontroller und Digitale Elektronik Arduino AccelStepper - Zählproblem in Run-Schleife


von Peter J. (jansinger)


Lesenswert?

Ich habe ein Problem - innerhalb der run-Schleife zählen meine Variablen 
falsch. Sobald ich aber eine zeitliche Verzögerung einfüge dann wir die 
Variable (TEST) richtig gezählt.

1
#include "AccelStepper.h"
2
3
AccelStepper X_Motor(1, 54, 55);   // Nema 17 on RAMPS 1.4 with 4988 
4
5
void setup() {
6
  pinMode(54  , OUTPUT);       // STEP_PIN
7
  pinMode(55  , OUTPUT);       // DIR_PIN
8
  pinMode(38  , OUTPUT);       // ENABLE_PIN
9
  digitalWrite(38 , LOW);      // 4988 aktiv 
10
}
11
12
void loop() {
13
14
       X_Motor.setMaxSpeed(500);
15
       X_Motor.setAcceleration(1000);
16
17
       X_Motor.setCurrentPosition(0);
18
19
       X_Motor.moveTo(1000);
20
 
21
       int TEST = 0;
22
       
23
       while (X_Motor.distanceToGo() && TEST < 500) {             
24
           
25
           if (digitalRead(3)){TEST++;}   // oder auch nur TEST++;
26
           X_Motor.run();
27
       
28
           delay(2);    // entferne ich den delay zählt TEST total falsch.
29
       }
30
31
32
Stop:
33
goto Stop;
34
}

von Thomas W. (diddl)


Lesenswert?

Peter J. schrieb:
> delay(2);    // entferne ich den delay zählt TEST total
> falsch.


TEST zählt nicht falsch.
Es zählt nur unglaublich schnell.


delay(2) warte 2 Millisekunden.
Für einen AVR ist das eine sehr lange Zeit.

Ohne den delay() läuft die Schleife wahrscheinlich tausend mal pro 
Millisekunde.

Und so würde bereits nach einer halben Millisekunde (500 Mikrosekunden) 
der Zähler auf 500 sein und deine Schleife abbrechen.

von Peter J. (jansinger)


Lesenswert?

Ok, vielen Dank - ich war der falschen Meinung, dass bei einem Step die
Schleife auch nur einmal durchläuft.....das erklärt aber jetzt alles.

von Einer K. (Gast)


Lesenswert?

>  X_Motor.run();

Ich halte es für falsch run() in einer extra Schleife auszuführen.
Es reicht, oder es wäre besser, die Extraschleife zu entsorgen.
Und run() bei jedem loop() Durchlauf aufzurufen.

von Peter J. (jansinger)


Lesenswert?

Danke, aber das Programm ist schon ein bisschen umfangreicher - 5 
Motoren, Display, SD-Card und jede Menge Schalter werden abgefragt. Das 
geht nicht alles in einer großen Schleife - aber stimmt, für die Demo 
hätte es gereicht.

von Einer K. (Gast)


Lesenswert?

Ich glaube, du hast mich nicht verstanden....
Aber ok, manchmal ist es so.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.