Utilizzo Wire.h per Display LCD e per comunicazione I2C

Buona domenica!
ho creato un sistema di raccolta di alcuni dati provenienti da alcuni sensori e che vengono visualizzati su un Display LCD. Il codice è questo:

#include <BMP180.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#define CALIBRATION 5200 //da calibrare per riferimento pressione al livello del mare
//#define Altitude 42.713 //Altitude San Pietro in Cerro (Piacenza, Emilia-Romagna, Italy)
//#define Altitude 60.843 //Altitude Piacenza (Piacenza, Emilia-Romagna, Italy)
#define ONE_WIRE_BUS 2
#define LDR_Pin A0
#define MQ5_Pin A1
#define FC4_Pin A2
BMP180 bmp_p_sensor;
float seaLevelPressure = 102370; // cambia in continuazione la pressione al livello del mare, perciò impossibile definire un dato fisso
float pressionelivellodelmarehPa; // variabile per la pressione al livello del mare in hPa
float pressionelivellodelmare; // variabile per la pressione in Pa
int valLuce;
int percLuce;
int valGas;
int percGas;
int valSuono;
int percSuono;
byte alterna = 0;
unsigned long Tempo = 0;
const long intervalloTemperatura = 5000;
const long intervalloLuminosita = 5000;
const long intervalloGas = 5000;
const long intervalloSuono = 5000;
const long intervalloBMP = 5000;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(12, 11, 5, 4, 3, 6);

void MostraLuminosita()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  valLuce = analogRead(LDR_Pin);
  percLuce = map(valLuce, 0, 1023, 0.0, 100.0);
  lcd.print(F("Luminosita': "));
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(percLuce);
  lcd.print(F("%"));
}

void MostraTemperatura()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temperatura: ");
  lcd.setCursor(0, 1);
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print(" ");
  lcd.print ((char)223);
  lcd.print('C');
}

void MostraSuono()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  valSuono = analogRead(FC4_Pin);
  Serial.print(valSuono);
  Serial.println();
  percSuono = map(valSuono, 0, 1023, 0.0, 100.0);
  lcd.print(F("Rumore: "));
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(percSuono);
  lcd.print(F("%"));
}

void MostraPresenzaGas()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  valGas = analogRead(MQ5_Pin);
  percGas = map(valGas, 0, 1023, 0.0, 100.0);
  lcd.print(F("Presenza Gas: "));
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(percGas);
  lcd.print(F("%"));
}

void MostraPressioneAssoluta()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(F("Pr.Assoluta: "));// calcolata nel vuoto
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(bmp_p_sensor.GetPressure());
  lcd.print(F(" Pa"));
}

void MostraPressioneRelativa()
{
  pressionelivellodelmare = bmp_p_sensor.GetPressure() + CALIBRATION; //in Pa
  pressionelivellodelmarehPa = pressionelivellodelmare / 100; //in hPa
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(F("Pr.Relativa: "));//calcolata grazie ad un'altra pressione
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(pressionelivellodelmarehPa);
  lcd.print(F(" hPa"));
}

void MostraAltitudine()
{
  float altitudine = bmp_p_sensor.GetAltitude(seaLevelPressure);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(F("Altitudine: "));
  lcd.setCursor(0, 1);
  lcd.print(F("     "));
  lcd.setCursor(0, 1);
  lcd.print(altitudine);
  lcd.print(F(" m"));
}

void setup()
{
  Serial.begin(9600);
  sensors.begin();
  Wire.begin();
  bmp_p_sensor = BMP180();
  if (bmp_p_sensor.EnsureConnected())
  {
    bmp_p_sensor.SoftReset();
    bmp_p_sensor.Initialize();
  }
  lcd.begin(16, 2);
  pinMode(LDR_Pin, INPUT);
  pinMode(MQ5_Pin, INPUT);
  pinMode(FC4_Pin, INPUT);
  lcd.setCursor(1, 0);
  lcd.print("ARDUROVER 1.2");
  delay(3000);
  Tempo = millis();
}

void loop() {
  sensors.requestTemperatures();

  switch (alterna) {
    case 0:
      if (millis() - Tempo <= intervalloTemperatura)
      {
        MostraTemperatura();
      }
      else {
        Tempo = millis();
        alterna = 1;
      }
      break;
    case 1:
      if (millis() - Tempo <= intervalloLuminosita)
      {
        MostraLuminosita();
      }
      else {
        Tempo = millis();
        alterna = 2;
      }
      break;
    case 2:
      if (millis() - Tempo <= intervalloGas)
      {
        MostraPresenzaGas();
      }
      else {
        Tempo = millis();
        alterna = 3;
      }
      break;
    case 3:
      if (millis() - Tempo <= intervalloBMP)
      {
        MostraPressioneAssoluta();
      }
      else {
        Tempo = millis();
        alterna = 4;
      }
      break;
    case 4:
      if (millis() - Tempo <= intervalloBMP)
      {
        MostraPressioneRelativa();
      }
      else {
        Tempo = millis();
        alterna = 5;
      }
      break;
    case 5:
      if (millis() - Tempo <= intervalloBMP)
      {
        MostraAltitudine();
      }
      else {
        Tempo = millis();
        alterna = 6;
      }
      break;
    case 6:
      if (millis() - Tempo <= intervalloSuono)
      {
        MostraSuono();
      }
      else {
        Tempo = millis();
        alterna = 0;
      }
      break;
  }
}

volevo mandare questi dati (per altre necessità) ad un altro arduino tramite protocollo I2C ( con un metodo MasterReader e SlaveSender)...volevo quindi integrare nel codice qua sopra questa procedura:

// Wire Slave Sender
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Sends data as an I2C/TWI slave device
// Refer to the "Wire Master Reader" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <Wire.h>


void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onRequest(requestEvent); // register event
}

void loop() {
  delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
  Wire.write("hello"); // respond with message of 6 bytes
  // as expected by master
}

solo che il mio timore è che i due utilizzi della libreria Wire.h possano, in qualche modo, ostacolarsi...è così?
Se invece non fosse cosi, quindi che posso utilizzarla lo stesso, tengo l'indirizzo (Wire.begin(8)) oppure no?

Grazie a chi mi aiuterà! :slight_smile:

EDIT: scusate per l'errore, la libreria Wire.h la utilizzavo per il display e non per il BMP180 (dove utilizzo OneWire.h)

ho correto!