Problema con mia creazione Robot

Qui lo sketch completo......

//variabili per loop ULTRASUONO
const byte Echo(30);
const byte Trig(31);
int Tempo=0; 
int Distanza=0;
int Cm=0;
byte MediaCm=0;
byte Direzione=0;

//variabili per loop RILEVA_DISTANZE
#include <Stepper.h>
const int Giro=200;
Stepper myStepper(Giro,41, 43, 45, 47);
unsigned long tempoMot=0;
boolean MuoviStepper=0;
boolean VerificaInCorso=1;
boolean ControlloDistanza=1;
byte Posizione=0;
byte RicordaPosizione=0;
byte VerificaDistanza[7]={};
byte PuntaDistanza=0;

//variabili per loop MEMORIZZA_DISTANZE
boolean RichiediVerifica=0;
boolean MemorizzaDistanze=0;
byte MemoriaDistanza_1[7]={};
byte MemoriaDistanza_2[7]={};
byte MemoriaDistanza_3[7]={};
byte PuntaMemoria_1=0;
byte PuntaMemoria_2=0;
byte PuntaMemoria_3=0;
byte ConfrontoMemoria=0;

//variabili per loop MEDIA_DISTANZE()
byte MediaMemorieDistanze[7]={};
byte PuntaMediaMemorie=0;
byte PosizionaPuntatori=0;
int MediaMemorie=0;
boolean MediaDistanze=0;


void setup()
{
 Serial.begin(9600);//velocita Serial Monitor 
 pinMode(Echo,INPUT);//ULTRASUONO
 pinMode(Trig,OUTPUT);//ULTRASUONO 
 myStepper.setSpeed(150);//PASSOPASSO    
}

void ULTRASUONO()
{ 
  digitalWrite(Trig,LOW);
  delayMicroseconds(2);//aspetta(ma non ho capito bene per quale motivo)
  digitalWrite(Trig,HIGH);     
  delayMicroseconds(10);//aspetta(ma non ho capito bene per quale motivo)
  digitalWrite(Trig,LOW);  
  Tempo=pulseIn(Echo,HIGH);//tempo uguale a pulseIn
  Cm=Tempo*0.0165725;//verifica la distanza in millimetri stando attento alla temperatura
  Distanza=Distanza+Cm;
  MediaCm++;
  if(MediaCm>10)
    {
     Distanza=Distanza/10; 
     VerificaDistanza[PuntaDistanza]=Distanza;
     Distanza=0;
     MediaCm=0;
    }
}

 void  MEMORIZZA_DISTANZE()
{ 
  if(VerificaInCorso==1)
    {
     if(ConfrontoMemoria==0)
       {
        if(PuntaDistanza==0)
          { 
           Serial.println(""); 
           Serial.println("");
           Serial.print("ConfrontoMemoria ");
           Serial.print(ConfrontoMemoria);
           Serial.print("  ");
           Serial.print(VerificaDistanza[PuntaDistanza]);
           Serial.print(" ");
          }
        if(PuntaDistanza!=0)
          { 
           Serial.print(VerificaDistanza[PuntaDistanza]); 
           Serial.print(" "); 
          } 
       }
        
     if(ConfrontoMemoria==1)
       {
        PuntaMemoria_1=PuntaDistanza;
        MemoriaDistanza_1[PuntaMemoria_1]=VerificaDistanza[PuntaDistanza];

        if(PuntaMemoria_1==0)
          { 
           Serial.println(""); 
           Serial.println("");
           Serial.print("ConfrontoMemoria ");
           Serial.print(ConfrontoMemoria);
           Serial.print("  ");
           Serial.print(MemoriaDistanza_1[PuntaMemoria_1]);
           Serial.print(" ");
          }
        if(PuntaMemoria_1!=0)
          { 
           Serial.print(MemoriaDistanza_1[PuntaMemoria_1]); 
           Serial.print(" "); 
          } 
       }
       
     if(ConfrontoMemoria==2)
       {
        PuntaMemoria_2=PuntaDistanza;
        MemoriaDistanza_2[PuntaMemoria_2]=VerificaDistanza[PuntaDistanza];
        if(PuntaMemoria_2==0)
          { 
           Serial.println(""); 
           Serial.println("");
           Serial.print("ConfrontoMemoria ");
           Serial.print(ConfrontoMemoria);
           Serial.print("  ");
           Serial.print(MemoriaDistanza_2[PuntaMemoria_2]);
           Serial.print(" ");
          }
        if(PuntaMemoria_2!=0)
          { 
           Serial.print(MemoriaDistanza_2[PuntaMemoria_2]); 
           Serial.print(" "); 
          }
       }
     if(ConfrontoMemoria==3)
       {
        PuntaMemoria_3=PuntaDistanza;
        MemoriaDistanza_3[PuntaMemoria_3]=VerificaDistanza[PuntaDistanza];
        if(PuntaMemoria_3==0)
          { 
           Serial.println(""); 
           Serial.println("");
           Serial.print("ConfrontoMemoria ");
           Serial.print(ConfrontoMemoria);
           Serial.print("  ");
           Serial.print(MemoriaDistanza_3[PuntaMemoria_3]);
           Serial.print(" ");
          }
        if(PuntaMemoria_3!=0)
          { 
           Serial.print(MemoriaDistanza_3[PuntaMemoria_3]); 
           Serial.print(" "); 
          }
       }
    } 
}


 void  RILEVA_DISTANZE()
{ 
  
  PuntaDistanza=Posizione;     
  if(VerificaInCorso==1)
    {               
     if(Posizione>6)//SE  la posizione in cui mettersi supera la dimensione dell'array
       {
        Posizione=0;//riporta la posizione al punto di partenza
        ConfrontoMemoria++;      
       }

     if(ConfrontoMemoria>3)
       {
        VerificaInCorso=0;
        ConfrontoMemoria=0;      
        ControlloDistanza==0;//...................
        MediaDistanze=1;                           
       }
    
          
     if(MuoviStepper==1)//SE pronto al movimento
       {
        if(Posizione==0){myStepper.step(0);}// SE=0 resta Fermo Avanti
        if(Posizione==1){myStepper.step(150);}// SE=1 sposta Destra 1\2  
        if(Posizione==2){myStepper.step(150);}//SE=2 sposta Destra 1 
        if(Posizione==3){myStepper.step(-300);}//SE=3 torna Avanti venendo da Destra(aggiustato passo per meccanica sgranata)
        if(Posizione==4){myStepper.step(-150);}// SE=4 sposta Sinistra 1\2 
        if(Posizione==5){myStepper.step(-150);}//SE=5 sposta Sinistra 1 
        if(Posizione==6){myStepper.step(300);}//SE=6 torna Avanti venendo da Sinistra(aggiustato passo per meccanica sgranata)          
        MuoviStepper=0;//attiva il movimento(dopo la lettura) 
       }
              
     if(MuoviStepper==0)
       {  
        if(millis()-tempoMot>=200)
          {           
           ULTRASUONO();
           if(millis()-tempoMot>=800)
             {            
              MEMORIZZA_DISTANZE();
              Posizione++;
              MuoviStepper=1;   
              tempoMot=millis();//azzera il cronometro 
             }                 
          }         
       }
    }
}

void MEDIA_DISTANZE()
{
  if(MediaDistanze==1)
    {
     PuntaMemoria_1=PosizionaPuntatori;
     PuntaMemoria_2=PosizionaPuntatori;
     PuntaMemoria_2=PosizionaPuntatori;
     PuntaMediaMemorie=PosizionaPuntatori;
     MediaMemorie=MediaMemorie+MemoriaDistanza_1[PuntaMemoria_1];
     MediaMemorie=MediaMemorie+MemoriaDistanza_2[PuntaMemoria_2];
     MediaMemorie=MediaMemorie+MemoriaDistanza_3[PuntaMemoria_3];
     MediaMemorieDistanze[PuntaMediaMemorie]=MediaMemorie/3;
     if(PosizionaPuntatori==0)
       { 
        Serial.println(""); 
        Serial.println("");
        Serial.print("MediaMemorie        ");
        Serial.print(MediaMemorieDistanze[PuntaMediaMemorie]);
        Serial.print(" ");                     
       }
     if(PosizionaPuntatori!=0)
       { 
        Serial.print(MediaMemorieDistanze[PuntaMediaMemorie]); 
        Serial.print(" ");            
       }
     PosizionaPuntatori++;  
     if(PosizionaPuntatori>6)
       {
        PosizionaPuntatori=0;
        MediaDistanze=0;
       }
    }
}
     
void loop()
{
  if(ControlloDistanza==1){RichiediVerifica=1;}
  if(RichiediVerifica==1){RILEVA_DISTANZE();}
  MEDIA_DISTANZE();
}

In pratica il motorino sù cui è incastrato UltraSuono và in posizione,il sensore legge e memorizza.

Il tutto per 3 volte e fin qui tutto OK anche se le letture non sono il massimo della precisione.

Il problema sta qui

void MEDIA_DISTANZE()
{
  if(MediaDistanze==1)
    {
     PuntaMemoria_1=PosizionaPuntatori;
     PuntaMemoria_2=PosizionaPuntatori;
     PuntaMemoria_2=PosizionaPuntatori;
     PuntaMediaMemorie=PosizionaPuntatori;
     MediaMemorie=MediaMemorie+MemoriaDistanza_1[PuntaMemoria_1];
     MediaMemorie=MediaMemorie+MemoriaDistanza_2[PuntaMemoria_2];
     MediaMemorie=MediaMemorie+MemoriaDistanza_3[PuntaMemoria_3];
     MediaMemorieDistanze[PuntaMediaMemorie]=MediaMemorie/3;
     if(PosizionaPuntatori==0)
       { 
        Serial.println(""); 
        Serial.println("");
        Serial.print("MediaMemorie        ");
        Serial.print(MediaMemorieDistanze[PuntaMediaMemorie]);
        Serial.print(" ");                     
       }
     if(PosizionaPuntatori!=0)
       { 
        Serial.print(MediaMemorieDistanze[PuntaMediaMemorie]); 
        Serial.print(" ");            
       }
     PosizionaPuntatori++;  
     if(PosizionaPuntatori>6)
       {
        PosizionaPuntatori=0;
        MediaDistanze=0;
       }
    }
}

in pretica escono dei valori completamente senza senso.