Imcompréhension de: 0xff, & et for(i=2;i<9;i++) dans un code

Bonjour,
Je ne comprends pas quelques point du code ci-dessous fourni par le constructeur pour un capteur de distance lidar.
Notamment, je ne comprends pas:

  • Pourquoi uart[8] ne prends pas la valeur serial read, avec cette partie de code:
    for(i=2;i<9;i++)//save data in array
    {
    uart[i]=Serial1.read();
    }

  • La signification de “&” suivi de “0xff” dans la ligne:

                     if(uart[8]==(check&0xff))//verify the received data as per protocol
    

Merci pour vos réponses,
Voici le code:

int dist;//actual distance measurements of LiDAR
int strength;//signal strength of LiDAR
int check;//save check value
int uart[9];//save data measured by LiDAR
const int HEADER=0x59;//frame header of data package
int i=0;

//Takes setting the LiDAR samplerate rate at 10Hz as an example, and other settings can be modified accordingly.
void setup()
{
Serial.begin(115200);//set bit rate of serial port connecting Arduino with computer
Serial1.begin(115200); //set bit rate of serial port connecting LiDAR with Arduino
configure(samplerate_10,6,return_samplerate,samplerate_10,6,info_samplerate_10);
configure(save,4,return_save,save_success,5,info_save);
}
// According to the data protocol in TFmini Plus manual, the distance display can be obtained and displayed through serial terminal.
void loop()
{
delay(100);
if (Serial1.available())//check if serial port has data input
{
if(Serial1.read()==HEADER)//assess data package frame header 0x59
{
uart[0]=HEADER;
if(Serial1.read()==HEADER)//assess data package frame header 0x59
{
uart[1]=HEADER;
for(i=2;i<9;i++)//save data in array
{
uart[i]=Serial1.read();
}
check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7];
if(uart[8]==(check&0xff))//verify the received data as per protocol
{
dist=uart[2]+uart[3]*256;//calculate distance value
strength=uart[4]+uart[5]*256;//calculate signal strength value
Serial.print(“distance=”);
Serial.print(dist);
Serial.print(’\t’);
//Serial.print(“strength=”);
//Serial.print(strength);
Serial.print(’\n’);
}
}
}
}
}

Bonjour,

  • Je n’ai pas compris la première question for(i=2;i<9;i++) c’est un loop qui commence avec i = 2 et qui termine quand i = 8
  • Pour le & 0xFF, c’est un masque pour ne garder que l’octet de poids faible de la variable. Par exemple :
  0x1234
& 0x00FF
= 0x0034

Merci d’éditer votre post pour rajouter les balises de de code, c’est illisible tel quel:

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l’icône </> dans la barre d’outils pour indiquer que c’est du code

(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)