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);
}
}
}