Enviolo (Nuvinci) + Arduino für Rollstuhl

Sorry, sorry,
also daran soll's ja nun nicht im Mindesten liegen.
Ich bin für jeden Hinweis dankbar und stelle den fertigen Sketch gern hier noch einmal ein.
Ich finde Deinen Hinweis im Übrigen auch sehr "sozialkompetent" und kollegial.
Wie Du ja weist, sind meine eigenen Kompetenzen auch dem Gebiet der Programmierung
sehr übersichtlich, so dass ich an dieser Stelle auch tatsächlich bis auf einen gemeinsam erarbeiteten Sketch nur wenig zurückgeben kann.
Ich kann aber an dieser Stelle der Community gern Hilfe bei CAD Konstruktionen anbieten,
sollte dies hier mal versehentlich gewünscht sein.

//Waage
#include "HX711.h"
HX711 scale;
uint8_t dataPin = 6;
uint8_t clockPin = 7;
//Motor
const int SensorPin = 2;  //Interrupt Pin (nur 2 oder 3 @ Arduino Uno)
const byte Brake = 8;//Pinausgang Bremse, HIGH = Vollbremsung
const byte PWM = 9;// Pinausgang für Drehzahl
const byte power = 100;// Motor-Drehzahl-Normalbetrieb
const byte Drehrichtung = 10;// Pin Drehrichtungswechsel LOW/HIGH Drehrichtung
volatile long Counter;
volatile bool dir; // true: incr ; false: decr
bool setupStep = LOW;
bool Normalbetrieb = LOW;
String P;//dient nur der Kontrolle: Programmposition

void count() {
  Counter += dir ? +1 : -1;
}
void motor(bool Stop, bool Richtung, int pwmSignal) {
  digitalWrite (Brake, Stop);
  digitalWrite (Drehrichtung, Richtung);
  analogWrite (PWM, pwmSignal);
}
void M_Stop() {
  motor(HIGH, LOW, 0);
}
void M_Hoch() {
  motor(LOW, HIGH, power);
}
void M_Runter() {
  motor(LOW, LOW, power);
}
//**********************************************
void setup() {
  Serial.begin(9600);
  //Waage
  scale.begin(dataPin, clockPin);
  scale.set_scale(127.15);//es wird nur der Relativwert benötigt
  pinMode(dataPin, INPUT);
  pinMode(clockPin , OUTPUT);
  //Motor
  pinMode(SensorPin, INPUT); //definiertes Potenzial (HIGH/LOW) von einem Hall-Sensor
  pinMode(Brake , OUTPUT);
  pinMode(PWM , OUTPUT);
  pinMode(Drehrichtung , OUTPUT);//Drehrichung
}
//**********************************************
void loop() {
  motorSetup();
  motorMatik();
  /*
    Serial.print("\t Counts: ");
    Serial.println(Counter);
    // */
}
void motorSetup() {
  if (!setupStep) {  //Variable um den Setupvorgang vom Normalbetrieb zu trennen
    Counter = 0;
    dir = 1;
    attachInterrupt(digitalPinToInterrupt(SensorPin), count, CHANGE);
    delay(500);//kann delay sein, weil motorSetup nur einmal und ohne Wägezelle durchlaufen wird
    detachInterrupt(digitalPinToInterrupt(SensorPin));//Stop zur Ermittlung der Drehzahl über 500ms
    motor(LOW, LOW, 30); //Kriechgang (30) zum Anfahren der Endposition (Anschlag)
  }
  static unsigned long SetupMillis;
  if ((Counter < 10) && ((millis() - SetupMillis >= 1000))) {// 1s um den Anlaufprozess zu überbrücken
    M_Stop (); // Drehzahl sinkt am Anschlag unter (10) , der Motor stopt
    setupStep = HIGH;
    Counter = 1000;// Counter wir auf 100 gesetzt um ein "Überfahren" in den negativen Bereich zu verhindern
  }
  // Der Zähler wird auf Positionsmods umgestellt, absolute Werte werden gespeichert
  if (setupStep && !Normalbetrieb) {
    attachInterrupt(digitalPinToInterrupt(SensorPin), count, CHANGE);
    motor (LOW, HIGH, 120); //Richtungswechsel nach Anschlag
    if (Counter >= 1010) {//Fahrt auf Ausgangsposition (z.B X + 10)
      M_Stop ();//Setup-Phase ist beendet, Motor steht in Ausgangsposition
      Normalbetrieb = HIGH;//Umschalten auf Normalbetrieb
    }
  }
}
void motorMatik () {
  if (Normalbetrieb) {
    static unsigned long m_Millis;
    static unsigned long m_MillisH;
    long wz = scale.get_units();
    long positionM[] = {1040, 1600};
    long druckPosition = map (wz, 260, 4000, 1000, 1600);

    if (druckPosition > (Counter + 1) && Counter < positionM[1]) {
      M_Stop();
      P = 1;
      if (millis() - m_Millis >= 1000) {//Pause, um M_Hoch auslaufen zu lassen
        dir = 1;
        M_Runter();//Druck läßt nach
        m_MillisH = millis();
      }
    }
    else if (druckPosition < (Counter - 1) && Counter > positionM[0] ) {
      M_Stop();
      P = 2;
      if (millis() - m_MillisH >= 1000) {//Pause, um M_Runter auslaufen zu lassen
        dir = 0;
        M_Hoch();//Druck steigt
        m_Millis = millis();
      }
    }
    else {
      m_Millis = millis();
      m_MillisH = millis();
      M_Stop();
      P = 3;
    }
    /*
      Serial.print("druckPosition: ");
      Serial.print(druckPosition);
      Serial.print("\t millis: ");
      Serial.print(millis());
      Serial.print("\t m_Millis: ");
      Serial.print(m_Millis);
      Serial.print("\t M_H: ");
      Serial.print(m_MillisH);
      Serial.print("\t P_Position: ");
      Serial.print(P);
      // */
  }
}