ultrasonic sensor data and encoder data combined code

hello guys, in my project i want to get sensor data from 9 ultrasonic sensors and 1 rotary encoder data , i am unable to recieve both data at a time, if im trying to do using the code below i am getting a very late response in serial monitor my baud rate is 115200 , please check and tell me correction

static int pinA = 2; // Our first hardware interrupt pin is digital pin 2
static int pinB = 3; // Our second hardware interrupt pin is digital pin 3
volatile byte aFlag = 0; 
volatile byte bFlag = 0; 
volatile int encoderPos = 0;
volatile int oldEncPos = 0; 
volatile int reading = 0;
#define trigPin 52
#define echoPin 53
#define trigPin1 50
#define echoPin1 51
#define trigPin2 48
#define echoPin2 49
#define trigPin3 46
#define echoPin3 47
#define trigPin4 44
#define echoPin4 45
#define trigPin5 42
#define echoPin5 43
#define trigPin6 36
#define echoPin6 37
#define trigPin7 38
#define echoPin7 39
#define trigPin8 40
#define echoPin8 41


int counter = 0; 
int aState;
int aLastState;
float dist; 
String data;
float duration, distance, duration1, distance1, distance2, duration2, distance3, duration3, distance4, duration4, distance5, duration5, distance6, duration6, distance7, duration7,distance8,duration8;

void setup() {
   Serial.begin (115200);
  pinMode(pinA, INPUT_PULLUP); // set pinA as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases)
  pinMode(pinB, INPUT_PULLUP); // set pinB as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases)
  attachInterrupt(0,PinA,RISING); // set an interrupt on PinA, looking for a rising edge signal and executing the "PinA" Interrupt Service Routine (below)
  attachInterrupt(1,PinB,RISING); // set an interrupt on PinB, looking for a rising edge signal and executing the "PinB" Interrupt Service Routine (below)
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(trigPin4, OUTPUT);
  pinMode(echoPin4, INPUT);
  pinMode(trigPin5, OUTPUT);
  pinMode(echoPin5, INPUT);
  pinMode(trigPin6, OUTPUT);
  pinMode(echoPin6, INPUT);
  pinMode(trigPin7, OUTPUT);
  pinMode(echoPin7, INPUT); 
  pinMode(trigPin8, OUTPUT);
  pinMode(echoPin8, INPUT);
  Serial.begin (115200);
 
  }
  void PinA(){
  cli(); //stop interrupts happening before we read pin values
  reading = PIND & 0xC; // read all eight pin values then strip away all but pinA and pinB's values
  if(reading == B00001100 && aFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
    encoderPos --; //decrement the encoder's position count
    bFlag = 0; //reset flags for the next turn
    aFlag = 0; //reset flags for the next turn
  }
  else if (reading == B00000100) bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation
  sei(); //restart interrupts
}

void PinB(){
  cli(); //stop interrupts happening before we read pin values
  reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
  if (reading == B00001100 && bFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
    encoderPos ++; //increment the encoder's position count
    bFlag = 0; //reset flags for the next turn
    aFlag = 0; //reset flags for the next turn
  }
  else if (reading == B00001000) aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
  sei(); //restart interrupts
  if(oldEncPos != encoderPos)
{
dist=3.5*encoderPos;
//Serial.println(dist);
oldEncPos = encoderPos;
}
 
}
 float ultrasonic()
{
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin, LOW);
  

 
  duration = pulseIn(echoPin, HIGH);
  

  distance = (duration / 2) * 0.0343;
  return distance;
}
 float ultrasonic1()
{
  
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin1, LOW);
  

 
  duration1 = pulseIn(echoPin1, HIGH);
  

  distance1 = (duration1 / 2) * 0.0343;
  return distance1;
}
float ultrasonic2()
{
  
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin2, LOW);
  

 
  duration2 = pulseIn(echoPin2, HIGH);
  

  distance2 = (duration2 / 2) * 0.0343;
  return distance2;
}
float ultrasonic3()
{
  
  digitalWrite(trigPin3, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin3, LOW);
  

 
  duration3 = pulseIn(echoPin3, HIGH);
  

  distance3 = (duration3 / 2) * 0.0343;
  return distance3;
}
float ultrasonic4()
{
  
  digitalWrite(trigPin4, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin4, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin4, LOW);
  

 
  duration4 = pulseIn(echoPin4, HIGH);
  

  distance4 = (duration4 / 2) * 0.0343;
  return distance4;
}
float ultrasonic5()
{
  
  digitalWrite(trigPin5, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin5, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin5, LOW);
  

 
  duration5 = pulseIn(echoPin5, HIGH);
  

  distance5 = (duration5 / 2) * 0.0343;
  return distance5;
}
float ultrasonic6()
{
  
  digitalWrite(trigPin6, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin6, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin6, LOW);
  

 
  duration6 = pulseIn(echoPin6, HIGH);
  

  distance6 = (duration6 / 2) * 0.0343;
  return distance6;
}
float ultrasonic7()
{
  
  digitalWrite(trigPin7, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin7, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin7, LOW);
  

 
  duration7 = pulseIn(echoPin7, HIGH);
  

  distance7 = (duration7 / 2) * 0.0343;
  return distance7;
}
float ultrasonic8()
{
  
  digitalWrite(trigPin8, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin8, HIGH);
  delayMicroseconds(50);
  digitalWrite(trigPin8, LOW);
  

 
  duration8 = pulseIn(echoPin8, HIGH);
  

  distance8 = (duration8 / 2) * 0.0343;
  return distance8;
}
 
void loop()
{
       
//
//if(oldEncPos != encoderPos)
//{
//dist=3.5*encoderPos;
////Serial.println(dist);
//oldEncPos = encoderPos;
//}
   
 String d0=String(ultrasonic());
 String d1=String(ultrasonic1());
 String d2=String(ultrasonic2());
 String d3=String(ultrasonic3());
 String d4=String(ultrasonic4());
 String d5=String(ultrasonic5());
 String d6=String(ultrasonic6());
 String d7=String(ultrasonic7());
 String d8=String(ultrasonic8());
 String d9=String(dist);
 Serial.print(d0+':'+d1+':'+d2+':'+d3+':'+d4+':'+d5+':'+d6+':'+d7+':'+d8+':'+d9);
}

final_code.ino (6.63 KB)

Are any of your sensor readings 0? If so, that means no echo was detected and pulseIn() timed out after the default duration of 1000 ms. You can reduce the timeout duration according to the maximum possible distance the echo would travel to avoid unnecessarily long delays if an echo is lost.

Some other advice to make your code much better:
Put all your pins in arrays and use a for loop to set the pinMode and to read the sensors.

Use a single sensor read function that takes a trigger pin and echo pin as parameters.

It's not necessary to use String to assemble the serial data. It's more efficient and safer to send it in multiple Serial.print() statements:

Serial.print(distance);
Serial.print(':');

...and there's little point returning a variable that is a global.

...all of that and do not cross-post and do not hijack. Other post removed.

ok bro got it but my problem is , i am unable to get the data from the rotary encoder , i must be able to read both values at the same time

harsha999:
ok bro got it but my problem is , i am unable to get the data from the rotary encoder , i must be able to read both values at the same time

Whine, whine, whine. Fix the issues that have been pointed out. Post your revised code. Describe what it actually does, and how that differs from what you expect it to do.