Problemi con la funzione con il metodo wire.onReceive!

Buonasera a tutti!! Sto avendo un problema con la comunicazione tramite bus I2C tra un master Raspberry Pi B+ e uno slave Arduino Uno R3.
Il programma che gira sull’arduino attende un valore dal master e quando lo riceve lancia una funzione, tramite il metodo wire.onReceive, che a sua volta muove un motore a spazzole tramite una motorshield, verifica quando fermarsi tramite un sensore ad ultrasuoni e infine muove due stepper motor, prima uno poi l’altro.
Il programma che gira sul raspberry invia semplicemente un valore sul bus.
Da quanto ho capito dalle references, il metodo onReceive, prende in ingresso il nome di una funzione, la quale verrà lanciata non appena arriverà un dato dal bus. Il problema è che non lo fa!
Mi spiego meglio:senza modificare il circuito, provando a far eseguire il programma all’arduino, chiamando direttamente la funzione senza bisogno del metodo onReceive, il programma fa benissimo quello che deve fare.
Dall’altro lato, sempre senza modificare niente, caricando l’esempio slave_receiver funziona benissimo, il che esclude anche un montaggio scorretto dei cavetti SDA e SCL. Quando cerco di unire le due cose, però il tutto funziona fino al momento in cui dovrebbe funzionare il primo motore passo passo.
Cosa potrebbe essere? Di seguito vi allego l’intero codice!

#include <Wire.h>
#include <Stepper.h>

#define  IN_1  3
#define  INH_1 12
#define DCMAX 30
#define STEPS 512

byte echoPin=13;
byte trigPin=2;
unsigned int distance;
int dc;
Stepper one(STEPS, 8,10,9,11); 
Stepper two(STEPS, 4,6,5,7); 

void setup(){
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(IN_1, OUTPUT);
  pinMode(INH_1, OUTPUT);
  digitalWrite(INH_1,HIGH);
  one.setSpeed(30);
  two.setSpeed(30);
  //codice per l'interrupt da raspberry
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onReceive(execute); // register event
 
}
 

void loop(){
}

void execute(int numb){
  byte i;
  distance=distanza();
   if(distance>10){
   /*codice per muovere il motore*/
   for(i=0; i<DCMAX; i++){
     dc= map(i,0,100,0,255);
     analogWrite(IN_1,dc);
    }
   
   distance=distanza();
   while(distance>10)
     distance=distanza();
   dc=0;                  //arrivati alla distanza minima si azzera il duty cycle del motore
   digitalWrite(IN_1,dc);
   delay(1000);
  
  one.step(STEPS);
  delay(2000);
  
  two.step(STEPS);
  delay(2000);
   
  }
} 
  
int distanza(){
   unsigned int duration;
  
   digitalWrite(trigPin, LOW); 
   delayMicroseconds(2); 
   digitalWrite(trigPin, HIGH);
   delayMicroseconds(10); 
   digitalWrite(trigPin, LOW);
   duration = pulseIn(echoPin, HIGH);
   return duration/58.2;
}

Grazie mille!!!