Besoin d'aide pour comprendre un code qui sert à varier des moteurs

Bonjor, j'ai besoin d'aide pour comprendre ce code, je n'ai pas besoin d'aide au niveau de la bibliothèque mirf, mais au niveau des variable Mspeed1 et mspeed2, les variable numero1 et numero2 sont les valeurs analogiques du joystick sur une autre carte, je ne comprends pas cette partie mathématique si quelqu'un peut m'aider merci.

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

//Assignation des pins de l'Arduino
#define motorPin1a 7 // Marche avant du premier moteur
#define motorPin1b 8 // Marche arrière du premier moteur
#define speedPin1 6 // L293D enable pin pour le premier moteur
#define motorPin2a 3 // Marche avant du deuxième moteur
#define motorPin2b 4 // Marche arrière du deuxième moteur
#define speedPin2 5 // L293D enable pin pour le deuxième moteur

// jusqu'à nouvel ordre, la vitesse du moteur est nulle
int Mspeed= 0;
int Mspeed1 = 0; 
int Mspeed2 = 0;  



void setup() {

  // réglage des broches à output
  pinMode(motorPin1a, OUTPUT);
  pinMode(motorPin1b, OUTPUT);
  pinMode(speedPin1, OUTPUT);
  pinMode(motorPin2a, OUTPUT);
  pinMode(motorPin2b, OUTPUT);
  pinMode(speedPin2, OUTPUT);

  Serial.begin(9600);  // pour le débogage
  
  Mirf.cePin = 9; // CE sur D9
  Mirf.csnPin = 10; // CSN sur D10
  Mirf.spi = &MirfHardwareSpi; 
  Mirf.init();

  Mirf.channel = 0; 
  Mirf.payload = 4; 
  Mirf.config(); 
  
  Mirf.setTADDR((byte *)"nrf01"); // Le 2eme module va envoyer ses info au 1er module
  Mirf.setRADDR((byte *)"nrf02"); // On définit ici l'adresse du 2eme module
  
}

void loop(){
  int numero1=1023;
  int numero2=1023;
  byte numero;
  int pairimpair;
  byte data[Mirf.payload]; // Tableau de byte qui va stocker le message recu
  
  if(!Mirf.isSending() && Mirf.dataReady()){ // Si un message a été recu et qu'un autre n'est pas en cours d'emission
    
   Mirf.getData(data); // on récupére le message 
  
  // la suite de 4 bytes est convertie en 2 int   
   numero1 = ((long )data[0]) << 8;
   numero1 |= data[1];
   numero2 = ((long )data[2]) << 8;
   numero2 |= data[3];
    
   // pour débogage, on pourra enlever ensuite:
   Serial.print("Recu les numeros ");    
   Serial.print(numero1,DEC);
   Serial.print(" , ");
   Serial.println(numero2,DEC);
  
    Mspeed1 = (numero1-511)/2 - (numero2-511)/2;
    
    if (Mspeed1 > 255) {
    Mspeed1 = 510;
  }
    if (Mspeed1 < -255) {
    Mspeed1 = -510;
  }
   
  
  Mspeed2 = (numero1-511)/2;
  Mspeed2 = Mspeed2 - (numero2-511)/2;
  if (Mspeed2 > 255) {
    Mspeed2 = 255;
  }     
  if (Mspeed2 < -255) {
    Mspeed2 = -255;
  }
  
  if (Mspeed1 > 0)  // donc marche arrière
  {
    analogWrite(speedPin1, abs(Mspeed1)); 
    digitalWrite(motorPin1a, HIGH); 
    digitalWrite(motorPin1b, LOW); 
  }
  else {   // donc marche avant (ou repos)
    analogWrite(speedPin1, abs(Mspeed1)); 
    digitalWrite(motorPin1a, LOW); 
    digitalWrite(motorPin1b, HIGH); 
  }
  
  if (Mspeed2 < 200)  // donc marche arrière
  {  
    analogWrite(speedPin2, abs(Mspeed2)); 
    digitalWrite(motorPin2a, HIGH); 
    digitalWrite(motorPin2b, LOW);    
  }
    
  else  // donc marche avant (ou repos)
  {   
    analogWrite(speedPin2, abs(Mspeed2)); 
    digitalWrite(motorPin2a, LOW); 
    digitalWrite(motorPin2b, HIGH); 
  }

  }
}

Leur code est assez nul...

Par exemple Si vous comparez

Mspeed1 = (numero1-511)/2 - (numero2-511)/2;

Et

Mspeed2 = (numero1-511)/2;
Mspeed2 = Mspeed2 - (numero2-511)/2;

Vous verrez que Mspeed2 et Mspeed1 c'est la même chose... ensuite ils font des calculs avec des valeurs à la noix pour définir un min et max de ces valeurs ou les laisser comme telles entrée les deux mais pour finir par comparer avec 0 ou 200... ça doit dépendre de leur joystick et son calibrage

ne vous prenez pas la tête faites le votre :slight_smile: en fonction des valeurs de joystick que vous recevez