Distance measurement

Good luck using the Russian example. Even after reducing the 'data' array to 4x500 instead of 4x5000 the RAM usage is still 1380% (uses almost 14 times the RAM that an Arduino UNO has).

The good news is that the writing of registers is pretty straightforward. Look at the writeReg0(), writeReg1(),...writeReg6() functions.

I fixed some of the coding errors that might have been caused by translation software:

#include <SPI.h>
const int slaveSelectPin = 8;
const int resetPin = 4;
const int START = 7;
byte res [2];
byte test;
float r [2];
float ToF;
float Result;
int n = 0;
int s [4];
int i = 0;
int j = 0;
int m = 0;
int k = 0;
int l = 0;
// int n = 0;  //??? Double definition might be a a translation artifact?
float sred = 0;
unsigned int shagtime = 50;
int pos = 0;
int flag = 0;
unsigned long time1 = 0;
unsigned long time1_p = 0;
unsigned long time2 = 0;
unsigned long time2_p = 0;
boolean pulse = LOW;
int iteration = 0;
float data [4][500]; //??? was [5000];  // 40,000 bytes is WAY too large for an Arduino UNO
float scan [5000];

void RESET () {
  digitalWrite (resetPin, LOW);
  delay (0.001);
  digitalWrite (resetPin, HIGH);
}
void INIT () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x70);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg0 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x80);
  SPI.transfer (0x00);
  SPI.transfer (0x24);
  SPI.transfer (0x10);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg1 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x81);
  SPI.transfer (0x19);
  SPI.transfer (0x49);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg2 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x82);
  SPI.transfer (0xE0);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg3 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x83);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg4 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x84);
  SPI.transfer (0x20);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg5 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x85);
  SPI.transfer (0x10);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void writeReg6 () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0x86);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
}
void ReadDATA () {
  digitalWrite (slaveSelectPin, LOW);
  SPI.transfer (0xB0);
  res [1] = SPI.transfer (0x00);
  res [0] = SPI.transfer (0x00);
  digitalWrite (slaveSelectPin, HIGH);
  r [0] = float (res [0]);
  r [1] = float (res [1]);
  ToF = (r [0] + 256 * r [1]) * 0.09;
  Result = ToF * 0.299792458 / 2;
  data [iteration] [k] = Result;
  k ++;
}
void setup () {
  pinMode (slaveSelectPin, OUTPUT);
  pinMode (resetPin, OUTPUT);
  pinMode (START, OUTPUT);
  digitalWrite (slaveSelectPin, HIGH);
  digitalWrite (START, LOW);
  RESET ();
  SPI.begin ();
  SPI.setDataMode (SPI_MODE1);
  SPI.setClockDivider (SPI_CLOCK_DIV8);
  SPI.setBitOrder (MSBFIRST);
  writeReg0 ();
  writeReg1 ();
  writeReg2 ();
  writeReg3 ();
  writeReg4 ();
  writeReg5 ();
  writeReg6 ();
  attachInterrupt (0, ReadDATA, LOW);
  Serial.begin (9600);
  s [0] = 10;
  s [1] = 9;
  s [2] = 6;
  s [3] = 5;
  pinMode (s [0], OUTPUT);
  pinMode (s [1], OUTPUT);
  pinMode (s [2], OUTPUT);
  pinMode (s [3], OUTPUT);
  pinMode (3, INPUT);
  digitalWrite (s [0], LOW);
  digitalWrite (s [1], LOW);
  digitalWrite (s [2], LOW);
  digitalWrite (s [3], LOW);
  delay (1000);
  attachInterrupt (1, STARTSHAG, FALLING);
}
void STARTSHAG () {
  s [0] = 5;
  s [1] = 6;
  s [2] = 9;
  s [3] = 10;
  flag = 1;
  pos = 0;
}
void ROTATE1 () {
  time1 = millis ();
  if (time1 - time1_p >= shagtime) {
    time1_p = time1;
    digitalWrite (s [i], HIGH);
    digitalWrite (s [j], HIGH);
    for (m = 0;
         m < 4;
         m ++) {
      if (m != i && m != j) {
        digitalWrite (s [m], LOW);
      }
    }
    if (j == i) {
      j = (i + 1) % 4;
    }
    else {
      i = (i + 1) % 4;
    }
    if (flag == 1) {
      pos ++;
    }
  }
}

void LaserPulse () {
  time2 = micros ();
  if (time2 - time2_p >= 125) {
    time2_p = time2;
    pulse = ~pulse;
    digitalWrite(START, pulse);
  }
}

void loop() {
  if (iteration < 4) {
    ROTATE1();
    if (pos == 156) {
      s[0] = 10;
      s[1] = 9;
      s[2] = 6;
      s[3] = 5;
      flag = 0;
      iteration++;
    }
    if (pos >= 28 && pos <= 128) {
      LaserPulse();
    }
  }
  else {
    for (l = 0; l < 5000; l++) {
      for (n = 0; n < 4; n++) {
        sred += (data[n][l]) / 4;
      }
      scan[l] = sred;
      sred = 0;
    }
    for (l = 0; l < 5000; l++) {
      Serial.println(scan[l]);
    }
  }
}