How to Connect multiple LCD displays to I2C ports

I am trying to make a project with 3 sensors and 3 LCD Displays (Grove 16x2) - when 1 display show values for 1 sensor,
I have following sensors: Air Quality, Dust, and Co2
I have 1st created a project for each sensor connected to one display
And now I am trying to put together the code for all sensors and displays together, but I dont know how to assign each display a specific sensor connected to specific I2C ports … the Grove Shield has 4 I2C ports but I dont know how to distinguish them in the code…
as you can see on the picture - now both displays show the same sensor value…

here you can see the code where I tried to combine the DUST and AIR with 2 Displays :

#include <Wire.h>
#include <rgb_lcd.h>
#include “Air_Quality_Sensor.h”
AirQualitySensor sensor(A0);
int pinDust = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
rgb_lcd lcd; // Create entity for display interface
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // Initialise display - 2 lines with 16 characters respectively
pinMode(pinDust,INPUT);
starttime = millis();//get the current time; millseconds since the Arduino bean running the curent program. in this case it starts at 0
//air
Serial.println(“Waiting sensor to init…”); // a simple message that tells the user to be patient
delay(20000); // and let’s wait for the sensor to be ready
if (sensor.init()) { // this statement executes after 20s, it checks if anyting has come through
Serial.println(“Sensor ready.”);
} else {
Serial.println(“Sensor ERROR!”);
}
}
void loop()
{
duration = pulseIn(pinDust, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
{
ratio = lowpulseoccupancy/(sampletime_ms10.0); // Integer percentage 0=>100
concentration = 1.1
pow(ratio,3)-3.8pow(ratio,2)+520ratio+0.62; // using spec sheet curve
Serial.print("dust concentration: “);
Serial.print(concentration);
Serial.print(” pcs/0.1cf “);
Serial.println(” ");
lowpulseoccupancy = 0;
starttime = millis();
}
int quality = sensor.slope();
Serial.print(“Sensor value: “);
Serial.println(sensor.getValue());
if (quality == AirQualitySensor::FORCE_SIGNAL) {
Serial.println(“High pollution! Force signal active.”);
} else if (quality == AirQualitySensor::HIGH_POLLUTION) {
Serial.println(“High pollution!”);
} else if (quality == AirQualitySensor::LOW_POLLUTION) {
Serial.println(“Low pollution!”);
} else if (quality == AirQualitySensor::FRESH_AIR) {
Serial.println(“Fresh air.”);
}
delay(1000);
{
lcd.clear();
int red = 0;
int green = 0;
int blue = 0;
lcd.setRGB(red, green, blue);
lcd.setCursor(0, 0); // Move cursor to the beginning of the first line on the display
lcd.print(“DUST”);
lcd.setCursor(0, 1); // Move cursor to the beginning of the second line on the display
lcd.print(“pcs/0.1cf:”);
lcd.print(concentration);
lcd.setCursor(0, 0); // Move cursor to the beginning of the first line on the display
lcd.print(“Air Quality:”);
lcd.setCursor(0, 1); // Move cursor to the beginning of the second line on the display
lcd.print(sensor.getValue());
lcd.print(”:”);
if (quality == AirQualitySensor::FORCE_SIGNAL) {
lcd.println(“High Pollution!”);
} else if (quality == AirQualitySensor::HIGH_POLLUTION) {
lcd.println("Very Low! ");
} else if (quality == AirQualitySensor::LOW_POLLUTION) {
lcd.println("Low Quality! ");
} else if (quality == AirQualitySensor::FRESH_AIR) {
lcd.println("Clean Air ");
}
delay(0);
}
}

maybe its a mess as I was never combining different codes together in 1 so further I am uploading a separate codes I have for each 3 sensors with display which work perfectly:
DUST Sensor:

int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
#include <Wire.h>
#include <rgb_lcd.h>
rgb_lcd lcd; // Create entity for display interface
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // Initialise display - 2 lines with 16 characters respectively
Serial.begin(9600);
pinMode(pin,INPUT);
starttime = millis();//get the current time; millseconds since the Arduino bean running the curent program. in this case it starts at 0
}
void loop()
{
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
{
ratio = lowpulseoccupancy/(sampletime_ms10.0); // Integer percentage 0=>100
concentration = 1.1
pow(ratio,3)-3.8pow(ratio,2)+520ratio+0.62; // using spec sheet curve
Serial.print("dust concentration: “);
Serial.print(concentration);
Serial.print(” pcs/0.1cf “);
Serial.println(” ");
lowpulseoccupancy = 0;
starttime = millis();
{
lcd.clear();
int red = 0;
int green = 0;
int blue = 0;
lcd.setRGB(red, green, blue);
lcd.setCursor(0, 0); // Move cursor to the beginning of the first line on the display
lcd.print(“DUST”);
lcd.setCursor(0, 1); // Move cursor to the beginning of the second line on the display
lcd.print(“pcs/0.1cf:”);
lcd.print(concentration);
delay(0);
}
}
}

Air Quality:

#include “Air_Quality_Sensor.h”
#include <Wire.h>
#include <rgb_lcd.h>
AirQualitySensor sensor(A0); // this statement creates an object called “sensor” that holds the value and the info about the air quality
rgb_lcd lcd; // Create entity for display interface
void setup(void) {
Serial.begin(9600); // this establishes the serial communication to the computer and sets the communication speed.
lcd.begin(16, 2); // Initialise display - 2 lines with 16 characters respectively
Serial.println(“Waiting sensor to init…”); // a simple message that tells the user to be patient
delay(20000); // and let’s wait for the sensor to be ready
if (sensor.init()) { // this statement executes after 20s, it checks if anyting has come through
Serial.println(“Sensor ready.”);
} else {
Serial.println(“Sensor ERROR!”);
}
}
void loop(void) {
int quality = sensor.slope();
Serial.print(“Sensor value: “);
Serial.println(sensor.getValue());
if (quality == AirQualitySensor::FORCE_SIGNAL) {
Serial.println(“High pollution! Force signal active.”);
} else if (quality == AirQualitySensor::HIGH_POLLUTION) {
Serial.println(“High pollution!”);
} else if (quality == AirQualitySensor::LOW_POLLUTION) {
Serial.println(“Low pollution!”);
} else if (quality == AirQualitySensor::FRESH_AIR) {
Serial.println(“Fresh air.”);
}
delay(1000);
{
lcd.clear();
int red = 0;
int green = 0;
int blue = 0;
lcd.setRGB(red, green, blue);
lcd.setCursor(0, 0); // Move cursor to the beginning of the first line on the display
lcd.print(“Air Quality:”);
lcd.setCursor(0, 1); // Move cursor to the beginning of the second line on the display
lcd.print(sensor.getValue());
lcd.print(”:”);
if (quality == AirQualitySensor::FORCE_SIGNAL) {
lcd.println(“High Pollution!”);
} else if (quality == AirQualitySensor::HIGH_POLLUTION) {
lcd.println("Very Low! ");
} else if (quality == AirQualitySensor::LOW_POLLUTION) {
lcd.println("Low Quality! ");
} else if (quality == AirQualitySensor::FRESH_AIR) {
lcd.println("Clean Air ");
}
delay(0);
}
}

CO2 sensor:

#include <Wire.h>
#include <rgb_lcd.h>
#include <SoftwareSerial.h>
SoftwareSerial s_serial(2, 3); // TX, RX
rgb_lcd lcd; // Create entity for display interface
#define sensor s_serial
const unsigned char cmd_get_sensor[] =
{
0xff, 0x01, 0x86, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79
};
unsigned char dataRevice[9];
int CO2PPM;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // Initialise display - 2 lines with 16 characters respectively
sensor.begin(9600); // there was delay(1000) delay(1000);
Serial.println(“CO2 sensor”);
}
void loop()
{
if(dataRecieve())
{
Serial.print(“CO2 ppm:”); Serial.print(CO2PPM); Serial.println("");
}
delay(5000);
{
lcd.clear();
int red = 0;
int green = 0;
int blue = 0;
lcd.setRGB(red, green, blue);
lcd.setCursor(0, 0); // Move cursor to the beginning of the first line on the display
lcd.print(“CO2 ppm:”);
lcd.setCursor(0, 1); // Move cursor to the beginning of the second line on the display
lcd.print(CO2PPM);
delay(0);
}
}
bool dataRecieve(void)
{
byte data[9];
int i = 0;
//transmit command data
for(i=0; i<sizeof(cmd_get_sensor); i++)
{
sensor.write(cmd_get_sensor[i]);
}
Serial.flush();
//begin reveiceing data if(sensor.available())
{
while(sensor.available())
{
for(int i=0;i<9; i++)
{
data[i] = sensor.read();
}
}
}
for(int j=0; j<9; j++)
{
Serial.print(" “);
}
Serial.println(”");
// First calculate then validate the check sum as there is no point in proceeding if the packet is corrupted. (code inspired by datasheet algorithm)
byte checksum = 0 ;
for(int j=1; j<8; j++)
{
checksum += data[j];
}
checksum=0xff-checksum;
checksum+=1;
if (checksum != data[8])
{
delay(1000);
Serial.println(“Error checksum”);
return false;
}
// Then check the start byte to make sure response is what we were expecting
if ( data[0] != 0xFF )
{
Serial.println(“Error start byte”);
return false;
}
// Then check the command byte to make sure response is what we were expecting
if ( data[1] != 0x86 )
{
Serial.println(“Error command”);
return false;
}
CO2PPM = (int)data[2] * 256 + (int)data[3];
return true;
}

thank you very much for any help I can get to make my project work

Best
Terezia