Mostrar mis datos LCD y WebServer

Buen día comunidad.

Les queria mostrar el codigo de mi programa que lo que hace es tomar la temperatura de 4 sensores dallas individualmente por puerto serial.

Ademas estuve probando para que me lo muestre por LCD y WebServer pero no logro que me muestre los 4 sensores separados.

A mi lo que me gustaria lograr es que en la pagina web de la arduino muestre los 4 sensores
y que en la pantalla LCD muestre cada 4 segundos la temperatura de un sensor y sea un bucle… 1 sensor (delay 4000)… el otro sensor (delay 4000) y asi.
Hasta ahora he logrado integrar todo el codigo pero al ser algo novato se me está complicando.
Esta seria la version sencilla.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS_PIN 22

OneWire oneWire(ONE_WIRE_BUS_PIN);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(172,27,72,198);
EthernetServer server(80);
int led = 53;

DeviceAddress Sensor01 = { 0x28, 0xFF, 0x62, 0x96, 0x74, 0x04, 0x00, 0x78 }; 
DeviceAddress Sensor02 = { 0x28, 0xFF, 0x23, 0x4C, 0x78, 0x04, 0x00, 0xFD };
DeviceAddress Sensor03 = { 0x28, 0xFF, 0xB5, 0x4E, 0x78, 0x04, 0x00, 0xD1 };
DeviceAddress Sensor04 = { 0x28, 0xFF, 0xA3, 0x40, 0x78, 0x04, 0x00, 0x24 };

LiquidCrystal lcd (48, 49, 44, 45, 46, 47);

void setup()   /****** SETUP: RUNS ONCE ******/
{
  pinMode (40, OUTPUT); /*Backligth*/
  
  // start serial port to show results
  Serial.begin(9600);
  Serial.print("Cargando Libreria Read Temp SGIT ");
  Serial.println(DALLASTEMPLIBVERSION);
  
  // Initialize the Temperature measurement library
  sensors.begin();
  
  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Sensor01, 10);
  sensors.setResolution(Sensor02, 10);
  sensors.setResolution(Sensor02, 10);
  sensors.setResolution(Sensor04, 10);
  
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  lcd.begin(16,2);
  lcd.clear();
  pinMode(led, OUTPUT);
  
}//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  {
  //Set LED Backlight to OFF
  digitalWrite(40, HIGH);
 
  //Read Shield Button from Analog 0 Pin
  double button2 = analogRead(0);
 
  
  
 
} 
  delay(4000);
  Serial.println();
  Serial.print("Numero de sensores en el mismo canal = ");  
  Serial.println(sensors.getDeviceCount());   
  Serial.print("Obteniendo Temperaturas... ");  
  Serial.println();   
  
  // Command all devices on bus to read temperature  
  sensors.requestTemperatures();  
  
  Serial.print("Heladera 1 Temperatura:   ");
  printTemperature(Sensor01);
  Serial.println();

  Serial.print("Heladera 2 Temperatura:   ");
  printTemperature(Sensor02);
  Serial.println();
  
  Serial.print("Heladera 3 Temperatura:   ");
  printTemperature(Sensor03);
  Serial.println();
  
  Serial.print("Heladera 4 Temperatura:   ");
  printTemperature(Sensor04);
  Serial.println();
   
  
}
void printTemperature(DeviceAddress deviceAddress)
{

float tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00) 
   {
   Serial.print("Error al obtener temperatura");
     }
    if (tempC > 30.00) 
   {
  digitalWrite(led, HIGH); 
    Serial.print("ALTA TEMPERATURA ");
    Serial.print(tempC);
  }
  else
   {
   Serial.print("C: ");
   Serial.print(tempC);
   lcd.setCursor(0,0);
   lcd.print("Heladera 1 "); 
   lcd.setCursor(0,1);
   lcd.print(tempC);      
   
 } 
    if (tempC < 30.00) 
   {
   digitalWrite(led, LOW);
     }
  
     EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
	  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
   for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

Cualquier ayuda, ejemplos, guias se los agradeceria mucho.

Saludos

Hola lavergarock.

Lo único que debes haces es separar los procedimientos.

Crea una función que obtenga las temperaturas pero sin presentarlas. Crea otra funcion que presente una temperatura genérica en el lcd a la que le debes pasar parámetros

Con el Webserver y el Serial como no tienes restricción haz que muestre constantemente.

la única diferencia que para poder mostrarlos desde un vector usaria Sensor[4] definido como tienes ahora Sensor01,Sensor02, Sensor03 y Sensor04;

El loop debería quedarte así

en el setup() {

    time = millis();
}


void loop () {
  
    leotemperaturas();             // las 4
    presentoWebySerial();        // esta claro
    
    if (millis()-time > 4000) {
    
       presentoLCD(sensor[i]),
       If (i++>3) i = 0;     // chequea si esta bien o debe ser i++>4 siempre me confunde
       time = millis();       // proximos 4 seg
    }

Muchisimas gracias surbyte!. Voy a trabajar en ello a ver como funciona.

Saludos!

Siempre separa las cosas. Una lee datos Otra presenta por esta via o por la otra. Luego podras llamarlas como quieras y cuando quieras. Se hace mas facil.