Projekt: Schrittmotor

Das mit der Zeit war nur für die serielle Übertragung PC -> Arduino gemeint. Es dauert halt ca. 2ms um zwei Zeichen zu schicken. Deshalb kannst du nach dem Empfang des ersten Zeichens nicht gleich das zweite auslesen, sondern musst warten bis beide da sind.

Serial.println(digitalRead(NEN)) gibt den aktuellen Wert des Pins aus. Das ist bevor du umschaltest. Wenn du jetzt sagts "Motor stop", gibt er da den alten Wert aus. Nicht den neuen. Kann sein, dass du damit durcheinander kommst.

Mach das mal so:

void loop()
{ 
  static boolean clkEin=false;

  if (Serial.available() > 0) 
  {
    x = Serial.read();
    y = Serial.read();
  
  
    Serial.print("x: ");
    Serial.print(x);
    Serial.print(" - y: ");
    Serial.println(y);
  
    if (x == '1' && y == '0') 
    {
       digitalWrite(DIR, LOW);
       digitalWrite(NEN, LOW);
       clkEin=true;
    }
    else if (x == '0' && y == '0')
    {
      digitalWrite(NEN, HIGH);
      clkEin=false;
    }
    else if (x == '1' && y == '1')
    {
      digitalWrite(DIR, HIGH);
      digitalWrite(NEN, LOW);
      clkEin=true;
    }

    Serial.println(digitalRead(NEN));
  }
  
  if (clkEin)
  {
    digitalWrite(CLK, HIGH); // CLK einschalten 
    delay(5); 
    digitalWrite(CLK, LOW); // CLK ausschalten 
    delay(5);  
  }
}

Dann führt er 1. Die Änderungen nur aus wenn wirklich was eingelesen wurde und 2. Wird NEN erst nach dem Umschalten ausgelesen. Das ist wahrscheinlich eher was du willst.