Stepper und Geschwindigkeit

Hier mal der Sketch:

#include <CheapStepper.h>
CheapStepper stepper;

boolean moveClockwise = true;
int s = 0;
int nStep;

void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);
Serial.println("28BYJ-48 bereit.");

}

void loop() {
  // put your main code here, to run repeatedly:
for (int s=0; s<1000; s++);
{
  stepper.step(moveClockwise);
  int nStep = stepper.getStep();
  
  if (nStep%1000==0) 
{
  Serial.print("Current step position: ");
  Serial.println(nStep);
  moveClockwise = !moveClockwise;
  delay(1000);
} 
}
}

Der Code funktioniert. Ich habe damit experimentiert und mir ist etwas aufgefallen was ich mir nicht erklären kann.

Und zwar: wenn ich beide Serial.print Befehle unter der "if" Funktion weggnehme und unter "int nStep = stepper.getStep();" schreibe. Ist der Stepmotor erheblich langsamer.

Warum ist das so? Ich verstehe nicht warum der Serial Befehl so ein Einfluß hat.

So wie Du das Programm geschrieben hast, macht er bei jedem Schleifen-Durchlauf einen Step.
Wenn Du die Serial.print Anweisungen aus dem if herausnimmst, werden sie bei jedem Durchlauf ausgeführt. Damit wird der Schleifen-Durchlauf deutlich langsamer, und damit auch deine Step Ausgabe.

Hi

Der Serial.print() schiebt die Zeichen bitweise zum PC.
Dafür braucht Er, bei 9600Baud, knapp 1ms pro Zeichen.
(bei 10.000 Baud (Bit die Sekunde) wären genau 1000 Zeichen, da vorne und hinten noch ein Steuer-Bit bei kommt - 1000 Zeichen x 10 Bit = 10.000Bit)
Wenn Du also 23+x Zeichen in jedem Durchlauf ausgibst, blockiert Das jede Runde 23+x ms.
Du kommst also maximal auf unter 50 Steps pro Sekunde (50 Steps x 20ms=1000ms=1Sek).
OHNE, daß der µC Da noch einen Pin wackeln lässt oder so Zeug - Das geschieht zusätzlich und braucht auch noch Zeit (Das sind aber wohl nur wenige ns).

MfG