Probleme I2C arduino switch case

Bonjour,

Je suis actuellement en train de realiser un projet ou je dois utiliser un protocole I2C pour envoyer une variable d’une carte arduino Mega a une carte arduino Uno, la variable est bien envoyé et reçu, mais nous n’arrivons pas a la faire traiter et à l’utiliser dans notre switch case

Le probleme est donc dans le programme receveur ou la switch case ne s’active pas

Programme du master writer:

#include <Wire.h>

const int Bouton = 2;
boolean etat; 
boolean dernieretat=LOW;
byte x = 0;


void setup() {
  Serial.begin(9600);
  pinMode(Bouton, INPUT);
  Wire.begin();
}

void loop() {
  
  etat = digitalRead(Bouton);

  if((etat != dernieretat)&&(etat==HIGH)){
    
  x++;
  Serial.print("x=");
  Serial.println(x);
  Wire.beginTransmission(4);
  Wire.write(x);
  Wire.endTransmission();
  }
  
  delay(500);
}

Programme du slave receiver:

#include <Wire.h>
#include <Servo.h>

Servo Servo1;
Servo Servo2;
int servo1pin = 3;
int servo2pin = 6;
int randNumber1;
int randNumber2;
boolean un= 1;
byte x;
int i = 0;

void setup()
{
  Wire.begin(4);
  Wire.onReceive(receiveEvent);
  
  Serial.begin(9600);
  Servo1.attach(servo1pin);
  Servo2.attach(servo2pin);
  Servo1.write(0);
  Servo2.write(0);
  delay(2000);
}

void receiveEvent(int howMany)
{
  int x = Wire.read();    // receive byte as an integer
  Serial.println(x);       // print the integer
}

void loop()
{
  if (x == 0){
    un =1;}
    
  if (un == 1){

    if (x > 0){                  //Si la valeur est supérieur à 0
    Serial.println (x, DEC);     //Marque sur l'écran la valeur de x
    Serial.println("hhhhh");
   }
    
  
    
  switch (x) {
    case 1: //Circuit 1 (HG)
       Servo1.write(60);
       Serial.println("60");
       Servo2.write(100);
       Serial.println("100");
       delay(1000); 
       un = 0;
       x = 0;
       Serial.println("rzyeafzu");
       break;
    case 2: //Circuit 2 (HD)
       Servo1.write(120);
       Serial.println("120");
       Servo2.write(100);
       Serial.println("100");
       delay(1000);
       un = 0;
       x = 0;
       break;
    case 3: //Circuit 3 (MG)
       Servo1.write(60);
       Serial.println("60");
       Servo2.write(90);
       Serial.println("90");
       delay(1000);
       un = 0;
       x = 0;
       break;
    case 4: //Circuit 4 (MD)
       Servo1.write(120);
       Serial.println("120");
       Servo2.write(90);
       Serial.println("90");
       delay(1000);
       un = 0;
       x = 0;
       break;
    case 5: //Circuit 5 (BG)
       Servo1.write(60);
       Serial.println("60");
       Servo2.write(80);
       Serial.println("80");
       delay(1000);
       un = 0;
       x = 0;
       break;
    case 6: //Circuit 6 (BD)
       Servo1.write(120);
       Serial.println("120");
       Servo2.write(80);
       Serial.println("80");
       delay(1000);
       un = 0;
       x = 0;
       break;
    case 7: //Circuit Aléatoire 1 (H)
      for (int i=0; i <= 9; i++){
       randNumber1 = random(60, 121);
       Servo1.write(randNumber1);
       Serial.println("random 60 à 120");
       Servo2.write(100);
       Serial.println("100");
       delay(1000);
       un = 0;
       x = 0;}
       break;
    case 8: //Circuit Aléatoire 2 (B)
      for (int i=0; i <= 9; i++){ 
       randNumber2 = random(60, 121);
       Servo1.write(randNumber2);
       Serial.println("random 60 à 120");
       Servo2.write(80);
       Serial.println("80");
       delay(1000);
       un = 0;
       x = 0;}
       break;
  }
  }
}

Merci à ceux qui nous aideront !

Dans ta routine de réception x est une variable locale. Elle ne risque pas d'être vue dans loop.
De plus, les variables traitées par une routine d'interruption doivent être définies volatil sinon l'optimisation par le compilateur peut empêcher leur mise à jour dans le reste du programme.