Problema visualizzazione LCD

Riciao a tutti, non so se ho fatto bene a scrivere qui, ma l’altro problema grazie a voi l’ho risolto, ma ora ne ho riscontrato un altro:
Nello sketch ho implementato la libreria ethernet per inviare i dati dei sensori alla pagina php e funziona alla perfezione, sono molto contento.
Il problema è che ora non visualizzo più niente nell’lcd. Se elimino la parte di sketch che si connette al server e invia i dati l’lcd ricomincia a funzionare…

Ecco il codice:

#include <SFE_BMP180.h>
#include <Wire.h>
#include "U8glib.h"
#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };

// Imposto l'ip di arduino
IPAddress ip(192,168,1,75);

EthernetClient client;

// Imposto l'host del server
char server[] = "www.pugnai.it";

#define DHTPIN 2     // Il pin a cui è collegato il sensore
#define DHTTYPE DHT22   // DHT 22  (AM2302)

// Identifico il sensore SFE_BMP180
SFE_BMP180 pressure;
// Identifico lo schermo
U8GLIB_ST7920_128X64_1X u8g(13, 16, 17); // SPI Com: en=18,rw=16,di=17

float temp = 0;
DHT dht(DHTPIN, DHTTYPE);
 
void setup()
{
 Serial.begin(9600);

  // Attendo la connessione DHCP
  Serial.println("Inizializzo...");
  if (!Ethernet.begin(mac)) {
    Ethernet.begin(mac, ip);
  }
 
  Serial.print("Il mio indirizzo e':");
  Serial.println(Ethernet.localIP());
 
 // Inizializza e calibra il sensore
 pressure.begin();

// imposto la scrittura sull'LCD
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }    
  
  dht.begin();
}
 
void leggi_BMP180(float* temp, float* press) {
 char status;
 double T,P;

 status = pressure.startTemperature();
 // Attende il completamento della lettura
 delay(status);
 
 // Ritorna la lettura di temperatura.
 status = pressure.getTemperature(T);
 status = pressure.startPressure(3);
 delay(status);
 status = pressure.getPressure(P,T);
 
 *temp = T;
 *press = P;
}
 
void loop()
{
 float temperatura, pressione;
 leggi_BMP180(&temperatura, &pressione);

  float h = dht.readHumidity(); // Leggo il valore di umidità
  float t = dht.readTemperature(); // Leggo il valore di temperatura

  float t_media = (t + temperatura) /2; // Faccio la media tra i 2 sensori
 
 // Stampa per la seriale di controllo
 Serial.print("Pressione atmosferica in mBar ......... = ");
 Serial.println(pressione);
 Serial.print("Temperatura media ....... = ");
 Serial.println(t_media);
 Serial.print("Umidita' in % ....... = ");
 Serial.println(h);
 Serial.print("\n\n");



   // connetto al server
    if (client.connect(server, 80))
    {
        // stampo sulla seriale lo stato
        Serial.println("connected...");
 
        // invio al server la richiesta GET per l'inserimento dei dati dei sensori
        client.print("GET /meteo/scrivi_meteo.php?key_controllo=");
        client.print("XXXXXX"); //inserire la key di controllo per la riuscita dello script
        client.print("&valore_temperatura=");
        client.print(t_media);
        client.print("&valore_umidita=");
        client.print(h);
        client.print("&valore_pressione=");
        client.print(pressione);
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();
 
        Serial.println("ARDUINO: GET inviato, il server ha risposto:");        
 
        delay(1000);

        if(client.available())
        {
 
            while(client.available())
            {
                char c = client.read();
                Serial.print(c);
            }
        }
        else
        {
            Serial.println("ARDUINO: no risposta");
        }
 
        client.stop();
    }
    // do nothing forever after:
    // while(true);

    u8g.firstPage();  
  do {
  u8g.setFont(u8g_font_courB10);
  u8g.drawStr( 0, 12 , "TABIA' EUGENIO");
  u8g.setFont(u8g_font_courB08);
  u8g.drawStr( 0, 24 , "TEMPERATURA");
  u8g.setPrintPos (80, 24); // imposta x, y posizione per la funzione di stampa 
  u8g.print (t_media); // Stampa la temperatura
  u8g.drawStr( 0, 36 , "PRESSIONE");
  u8g.setPrintPos (80, 36); // imposta x, y posizione per la funzione di stampa 
  u8g.print (pressione); // Stampa la pressione
  u8g.drawStr( 0, 48 , "UMIDITA'");
  u8g.setPrintPos (80, 48); // imposta x, y posizione per la funzione di stampa 
  u8g.print (h); // Stampa l'umidita'
  } while( u8g.nextPage() );

   delay(60000); //tempo tra una lettura e l'altra
   
}

Ho notato che eliminando questa parte del codice lo schermo riprende vita:

  // Attendo la connessione DHCP
  Serial.println("Inizializzo...");
  if (!Ethernet.begin(mac)) {
    Ethernet.begin(mac, ip);
  }
 
  Serial.print("Il mio indirizzo e':");
  Serial.println(Ethernet.localIP());

Ma, ovviamente il server non da risposta e lo script non viene inviato.

Ho provato in tutte le maniere, invertire le funzioni, snellire le variabili… non so più cosa fare…

i pin 10, 11 ,12 ,13 sono usati dalla Ethernet, non puoi usarli per altro
ci sarebbe anche il pin4, che e' usato dalla SD a bordo della Ethernet

forse ti conviene collegarlo sulla SPI Hardware
pin 13 sclk - rimane sul pin 13
pin 11 mosi - quello che ora hai collegato al pin 16 ( A2)
e passargli solo il CS, che puoi lasciare sul 17 dove e’ ora

U8GLIB_ST7920_128X64_1X(17)

forse ti conviene collegarlo sulla SPI Hardware
pin 13 sclk - rimane sul pin 13
pin 11 mosi - quello che ora hai collegato al pin 16 ( A2)
e passargli solo il CS, che puoi lasciare sul 17 dove e' ora

U8GLIB_ST7920_128X64_1X(17)

device · olikraus/u8glib Wiki · GitHub

Grazie 1000!
Riesco a far funzionare entrembe le cose...
Ora devo solo cercare di snellire il codice perchè occupa il 100% dello spazio.

Ultima (spero) domanda...
E' possibile tenere tutto acceso ma inserire un interruttore per spegnere solo il monitor?
Ho provato a togliere la "corrente" ma una volta reinserita non mi visualizza più niente, rimane acceso e basta. Può dipendere dal delay di 15 minuti?