Movimentazione motori stepper tramite protocollo DMX 512.

Buonasera a tutti,
è da tanto tempo che sono iscritto a questo forum ma è un sacco di tempo che non posto un topic. Ho cercato sia qui che in Rete informazioni sull’argomento manon ho trovato nulla. Come extrema ratio ho pensato di rivolgermi a voi.
Voglio pilotare 2 motori stepper NEMA 17 tramite driver Pololu A4988 tramite un segnale DMX 512 proveniente dal relativo chip che comunica con Arduino UNO alla porta RX.

Questo è il codice che ho scritto:

#include <Conceptinetics.h>
#define DMX_SLAVE_CHANNELS 2

DMX_Slave dmx_slave (DMX_SLAVE_CHANNELS);



const int pinDir = 2; //motore 1
const int pinStep = 3;//motore 1
const int pinDir2 = 4;//motore 2
const int pinStep2 = 5;//motore 2

int sense=HIGH;//senso motore 1
int sense2=HIGH;//senso motore 2
int velocita=1000;//velocità motore 1
int velocita2=1000;//velocità motore 2
int startStep=0;  // valore degli step iniziali del motore 1
int startStep2=0; // valore degli step iniziali del motore 2
int DMX=0; // questa variabie srà il risultato della funzione di lettura del DMX canale 1
int DMX2=0; // questa variabie srà il risultato della funzione di lettura del DMX canale 2
int resultStep=0; //differenza passi motore 1
int resultStep2=0; //differenza passi motore 2

void setup() {
  

dmx_slave.enable ();
dmx_slave.setStartAddress (1);

pinMode (pinStep,OUTPUT);
pinMode (pinDir,OUTPUT);
pinMode (pinStep2,OUTPUT);
pinMode (pinDir2,OUTPUT);

//Le seguenti righe effettuano il reset ossia fanno girare il motore CCW di 1000 passi

digitalWrite(pinDir, LOW);
 for (int x = 0; x < 1000; x++) {
    digitalWrite(pinStep, HIGH);
    delayMicroseconds(velocita);
    digitalWrite(pinStep, LOW);
    delayMicroseconds(velocita);
    }
    
digitalWrite(pinDir2, LOW);
 for (int x = 0; x < 1000; x++) {
    digitalWrite(pinStep2, HIGH);
    delayMicroseconds(velocita2);
    digitalWrite(pinStep2, LOW);
    delayMicroseconds(velocita2);
    }

}

void loop() {
  
  
//lettura della trasmissione DMX e assegnazione del valore a DMX


DMX=dmx_slave.getChannelValue (1); // assegna alla variabile DMX il valore della trasmissione sul canale 1
DMX2=dmx_slave.getChannelValue (2); // assegna alla variabile DMX il valore della trasmissione sul canale 2

DMX = map (DMX, 0, 255, 0, 800);//trasforma il range di valori 0-255 in 0-1000 motore 1
DMX2 = map (DMX2, 0, 255, 0, 800);//trasforma il range di valori 0-255 in 0-1000 motore 2


  
  
resultStep=DMX-startStep;// assegna alla variabile resultStep la differenza tra il valore DMX ricevuto e il numero di passi iniziale. il risultato ottenuto è il numero di passi che deve compiere il motore
resultStep2=DMX2-startStep2
;  
 //condizione per verificare la direzione del motore
  
 if(resultStep<0){
   digitalWrite(pinDir,LOW);//imposta la direzione CWW se il risultato è maggiore di 0
 }
   else
   {digitalWrite(pinDir,HIGH); //imposta la direzione CW se il risultato è minore di 0
   }
   
 if(resultStep2>0){
   digitalWrite(pinDir2,HIGH);//imposta la direzione CW se il risultato è maggiore di 0
 }
   else
   {digitalWrite(pinDir2,LOW); //imposta la direzione CCW se il risultato è minore di 0
   }
   
   //ciclo che muove il motore per i passi resultStep nella direzione ottenuta dalla condizione sopra
  
  for (int x=0; x<resultStep;x++)
  {
    digitalWrite(pinStep,HIGH);
    delayMicroseconds(velocita);
    digitalWrite(pinStep,LOW);
    delayMicroseconds(velocita);
  }
  
  
    for (int x=0; x<resultStep2;x++)
  {
    digitalWrite(pinStep2,HIGH);
    delayMicroseconds(velocita2);
    digitalWrite(pinStep2,LOW);
    delayMicroseconds(velocita2);
  }
  
  
  startStep=DMX; // assegna al numero iniziale di passi del motore 1 l'ultimo valore DMX trasformato in passi da 0 a 1000
  startStep2=DMX2; // assegna al numero iniziale di passi del motore 1 l'ultimo valore DMX trasformato in passi da 0 a 1000
    

}

Il motore dovrebbe muoversi CW quando riceve valori positivi e CCW quando riceve valori negativi ( il controller DMX invia un range di valori da 0 a 255 ). Per esempio: se porto lo slider del controller a 127 il motore dovrebbe compiere tanti passi da percorrere 180°, se riporto lo slider a 0 l’albero del motore dovrebbe ripercorrere all’indietro i 180° fino al passo di partenza ( lo 0).
Il mio problema è che il motore funziona solo in senso orario ignorando i valori negativi provenienti dal controller.
Non sono un fulmine di guerra nella programmazione ma secondo me il problema sta nelle condizioni che ho espresso all’inizio del loop. Purtroppo non riesco a venirne fuori. E’ un problema di logica/poca mia perizia in programmazione, chiunque un po’ esperto in programmazione può aiutarmi a risolverlo anche se digiuno di conoscenze sul protocollo DMX.

Ringrazio anticipatamente chi riuscirà ad aiutarmi.