[SOLUCIONADO]Problema con string shield Ethernet

Hola, wenas a todos.

Tengo un problema que no me deja avanzar y no logro entender el origen para poder solucionarlo.

Tengo una shield ethernet al arduino UNO, con dos sensores de temperatura DS18S20 y un sensor de humedad DTH11.

A través del explorador con la IP local visualizo lo siguiente:

Hasta aquí todo bien.

Lo que quiero ahora es grabar en la SD cada 30 minutos los valores de temperatura y humedad a modo de datalogger.

Para ello quiero crear una cadena para cada uno:

String datat;
String datah;

Lo que ocurre es que al crear la variables cadena el programa no funciona y no visualizo nada en el explorador, simplemente al declarar una cadena no funciona, es muy raro.

Os dejo el código para que veáis la declaración:

///___PROBLEMA: ____

// String dt; //SI DECLARO LA CADENA NO FUNCIONA EL PROGRAMA, NO MUESTRA NADA EN EL EXPLORADOR

Si elimino el comentario y declaro una variable tipo cadena no carga nada en el explorador, ¿a alguien le ha pasado algo parecido? ¿ Que puede estar pasando??

Muchas gracias y un cordial saludo.

#include <SPI.h>
#include <string.h>
#include <STDIO.h>
#include <Ethernet.h>
#include <SD.h>
#include <OneWire.h>  
#include <DallasTemperature.h>  
#include "DHT.h" //cargamos la librería DHT
#define DHTPIN 6 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
#define SPI_SD 4
#define SPI_ETHERNET 10 //53 for mega, for other set pin to 10

#define ONE_WIRE_BUS 7


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


////___DOS SENSORES DS18S20_____\\\\

DeviceAddress S1 = {0x28, 0xD7, 0x96, 0x4A, 0x03, 0x00, 0x00, 0x6B};  //Dirección Sensor Interior  
DeviceAddress S2 = {0x28, 0xFF, 0x14, 0x17, 0x44, 0x04, 0x00, 0x01};  //Dirección Sensor Exterior  




int ti;// Temp interior
int te;//  Temp exterior
int hum;
int tmax=-20;
int tmin=60;


///___PROBLEMA: ____

// String dt;   //SI DECLARO LA CADENA NO FUNCIONA EL PROGRAMA, NO MUESTRA NADA EN EL EXPLORADOR



byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 166);

EthernetClient client;
EthernetServer server(80);


long millis_anteriors = 0;
long interval = 5000;





void setup(){  
 

Serial.begin(9600); //Se inicia la comunicación serial   
sensors.begin(); 
dht.begin(); //Se inicia el sensor 

pinMode(SPI_SD, OUTPUT);
pinMode(SPI_ETHERNET, OUTPUT);
 
   if (!SD.begin(SPI_SD)) {
    Serial.println("Fallo de inicio o tarjeta no insertada:"); 
    return;
  } else {
   Serial.println("Inicio completado."); 

  EnableEthernet();
   Ethernet.begin(mac, ip);
  server.begin();
   Serial.print("Servidor en ");
  Serial.println(Ethernet.localIP());

  }
}  










 
void loop(){  
  
   sensors.requestTemperatures();  

   ti = sensors.getTempC(S1); 
   te = sensors.getTempC(S2); 
   hum = dht.readHumidity(); 
   if(te>tmax) tmax=te;  
   if(te<tmin) tmin=te;
 
 unsigned long millis_actuals = millis();
 
 
 
EnableEthernet();

 client = server.available();
  if (client) {
    Serial.println("new client");

    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("Connnection: close");
          client.println();
          
        client.println("<!DOCTYPE HTML>");
          client.println("<html>");
 
          client.println("<head>");
          client.println("<title>Estacion meteorologica</title>");
          client.println("<link href=\'http://fonts.googleapis.com/css?family=Roboto+Condensed\' rel=\'stylesheet\' type=\'text/css\'>");
          client.println("<style type=\"text/css\">p {font-size:150px;margin:0px} body {font-size:60px;text-align:center; font-family: \'Roboto Condensed\', sans-serif;}</style>");
          client.println("<meta http-equiv=\"refresh\" content=\"15\" >"); // refresco valores cada 15 segundos
 
 
           client.println("</head>");
          client.println("<hr>");
          
     
           client.print("Temperatura exterior  ");
          client.print(te); 
          client.println(" &ordm;C");
          client.println("
"); 
          client.println("
"); 
          client.print("Temperatura maxima  ");
          client.print(tmax); 
          client.println(" &ordm;C");
          client.println("
"); 
          client.print("Temperatura minima ");
          client.print(tmin); 
          client.println(" &ordm;C");
          client.println("
"); 
          client.println("
"); 
          client.print("Temperatura interior  ");
          client.print(ti); 
          client.println("
"); 
          client.println("
"); 
          client.print("Humedad    ");
          client.print(hum); 
          client.println(" %");
   
           client.println("
"); 
           client.println("
"); 
         
           client.println("<hr>"); 
      
          client.println("</html>");
          break;
        }
        
        
        if (c == '\n') currentLineIsBlank = true;
          else if (c != '\r')  currentLineIsBlank = false;
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
}

  
  
  void EnableSD(){
//Para comunicar con sd desabilitamos w5100 spi (pin 10 HIGH)
// Para comunicar con sd habilitamos sd spi (pin 4 low)
digitalWrite(SPI_SD, LOW);
digitalWrite(SPI_ETHERNET, HIGH);
}
void EnableEthernet(){
//Para comunicar con sd habilitamos w5100 spi (pin 10 low)
// Para comunicar con sd deshabilitamos sd spi (pin 4 HIGH)
digitalWrite(SPI_SD, HIGH);
digitalWrite(SPI_ETHERNET, LOW);
}

[

Podría ser que te quedes sin memoria?

¿la SRAM te refieres verdad?

lo he pensado pero como sea eso me muero...:frowning:

Claro que es eso, usa la función disponible para ver tu RAM en los momentos que creas son críticos en tu programa.

Available Memory

Empieza a optimizar las variables globales.
cuidado con el uso de variables String que son grandes consumidoras de RAM
Luego te paso un programa donde todo el código HTML es guardado como constante en lugar de crearlo consumiendo RAM como en tu caso.

Estos tips solucionarán tu problema.

SRAM Libre: 117

¿es muy poco verdad?

finalmente he utilizado la placa Arduino DUE, todo solucionado

muchas gracias

jaja, igual no solucinaste el problema pero sirve. Tenlo en cuenta para el futuro.