Stepper motor "jitters" when read analog signal from vl6180x TOF sensor

Hi Guys. I am new here and this is my first time to post a topic. :slight_smile:
Thank you for any help.

I am working on do two thing together in arduino mega.

  1. Read from two vl6180x sensors through TCA9548A I2C multiplexer.
  2. Control 4 stepper motors with 4 TB6600 sepratly.

They are running good independently, but when combine them in a sketch, a problem happened.

When the arduino read analog signal from the sensor, the stepper will "block" at that moment and then re-rotate. Sensor is read once per second, and the steppers "brake" once per second.
In my opinion, it may because reading from vl6180x take too much time, it brings a "delay" to disturb the running of stepper. But I do not know how to solve it and make the stepper running smoothly. Please give me some help.

#include <Wire.h>
#include "Adafruit_VL6180X.h"
#include <AccelStepper.h>

int speed1 = 1000; 
int speed2 = 1000; 
int speed3 = 1000; 
int speed4 = 1000;

unsigned long currentMillis = 0;
int sensor_Interval = 1000; //SensorDelay
unsigned long pre_distancesensorMillis1 = 500;
unsigned long pre_distancesensorMillis2 = 700;

////----------------------------------------------------------------preset::Distancesensor
#define TCAADDR 0x70

Adafruit_VL6180X sensor = Adafruit_VL6180X();

void tcaselect(uint8_t i) {
  if (i > 7) return; 
  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();  
}
  uint8_t range1 = 0; 
  uint8_t range11 = 0; 
  uint8_t range111 = 0; 
  int range1avg = 0;
  uint8_t status1 = 0;
   
  uint8_t range2 = 0;   
  uint8_t range22 = 0; 
  uint8_t range222 = 0;  
  int range2avg = 0;
  uint8_t status2 = 0;

  
//--------------------------------------------------------------------preset::Steppermotor
# define stepper1pul  5
# define stepper1dir  7
# define stepper2pul  51
# define stepper2dir  52
# define stepper3pul  4
# define stepper3dir  6
# define stepper4pul  53
# define stepper4dir  50
AccelStepper stepper1(1, stepper1pul, stepper1dir);
AccelStepper stepper2(1, stepper2pul, stepper2dir);
AccelStepper stepper3(1, stepper3pul, stepper3dir);
AccelStepper stepper4(1, stepper4pul, stepper4dir);

void setup() {
  // put your setup code here, to run once:
Wire.begin();   
Serial.begin(115200);
// ------------------------------------------------------------------  setup::Distancesensor
//    Wire.begin();  
//    Serial.println("\nTCA9548A with two sensor6180X sensors demo.");

    tcaselect(1); // now talking to sensor6180X on 2
    sensor.begin();   // init sensor
    tcaselect(2); // now talking to sensor6180X on 4
    sensor.begin();   // init sensor

// ------------------------------------------------------------------  setup::Steppermotor
pinMode (stepper1pul ,OUTPUT);  
pinMode (stepper1dir ,OUTPUT);  
pinMode (stepper2pul ,OUTPUT);  
pinMode (stepper2dir ,OUTPUT);  

stepper1.setMaxSpeed(2000);
stepper1.setAcceleration(20);
stepper1.setSpeed(speed1);

stepper2.setMaxSpeed(2000);
stepper2.setAcceleration(20);
stepper2.setSpeed(speed2);

stepper3.setMaxSpeed(1250);
stepper3.setAcceleration(20);
stepper3.setSpeed(speed3);

stepper4.setMaxSpeed(1250);
stepper4.setAcceleration(20);
stepper4.setSpeed(speed4);

delay(1000);
}

void loop() {
  
currentMillis = millis();
Steppermotor();
Distancesensor();
}

void Steppermotor(){   

stepper1.setSpeed(speed1);
stepper2.setSpeed(speed2);
stepper3.setSpeed(speed3);
stepper4.setSpeed(speed4);

stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
stepper4.runSpeed();

}

void Distancesensor() {
  
  if (currentMillis - pre_distancesensorMillis1 >= sensor_Interval){
 
  tcaselect(1); 
  range1 = sensor.readRange();  
  range11 = sensor.readRange(); 
  range111 = sensor.readRange(); 
  range1avg = int((range1+range1+range111)/3.0+0.5);
  status1 = sensor.readRangeStatus();
      if (status1 == 0) {      
        Serial.print("sensor6180X on port #1: "); 
        Serial.println(range1avg);
            }
      else{
        Serial.println("System error");
      }
    pre_distancesensorMillis1 = millis();
  }

  if (currentMillis - pre_distancesensorMillis2 >= sensor_Interval){
 
    
  tcaselect(2); 
  range2 = sensor.readRange(); 
  range22 = sensor.readRange(); 
  range222 = sensor.readRange(); 
  range2avg = int((range2+range22+range222)/3.0+0.5);
  status2 = sensor.readRangeStatus();
      if (status2 == 0) {       
        Serial.print("sensor6180X on port #2: "); 
        Serial.println(range2avg);
            }
      else{
        Serial.println("System error");
      }
   pre_distancesensorMillis2 = millis();    
  }
}