problema log sdcard + ethernet (urgente)

salve a tutti sto cercando di realizzare un progetto per gli esami e sono arrivato a un punto che non riesco andare avanti.. ho realizzato uno sketch che comanda due led da remoto e verifica la temperatura se essa sale sopra i 28 gradi parte una ventola.. e al di sotto la ventola si spegne o resta spenta fin qui tutto bene sono riuscito a far tutto.. ora vorrei inserire un rtc ds1307 e creare un log sulla sd con ora data e temperatura convertita...e postare lo stesso log sulla pagina(per farvi capire dentro la textarea che ho gia preparato...) il problema e che appena ci provo mi si impianta tutto sia la pagina html che il log non va piu niente :frowning: la pagina non risulta disponibile e il log non funziona.... potete aiutarmi e urgente ho poco tempo :((
questo e lo sketch che funziona senza log...

#include <SPI.h>
#include <Ethernet.h> 
byte mac[] = { mio mac };  //mac  ethernet shield
byte ip[] = { 192,168,1,2 };                       // indirizzo ip che verrà assegnato ad arduino    
EthernetServer server(80);                            // porta di comunicazione
String readString;
byte led_1 = 2;                                       
byte led_2 = 3;
int inPin = A0;
int fun=5;
float temp = 0; // variabile temperatura
int funfunction=0;


void setup()
{ 
  Ethernet.begin(mac, ip);   
  pinMode(led_1, OUTPUT); 
  pinMode(led_2, OUTPUT);
  pinMode(5, OUTPUT);  // pin per la ventola
  Serial.begin(9600); 
}
 
void loop(){
 
  usefun();
 temp = ( (5.0 * analogRead(inPin)*100.0) / 1023.0);
Serial.println(analogRead(inPin));

 EthernetClient  client = server.available();
 
  if (client) {
    boolean currentLineIsBlank = true;
   
    while (client.connected()) {
      if (client.available()) { 
        char c = client.read();
        readString.concat(c);   
        if (c == '\n' && currentLineIsBlank) {

               
        if(readString.indexOf("on_1") > 0)digitalWrite(led_1, HIGH);
        if(readString.indexOf("off_1") > 0) digitalWrite(led_1, LOW);          
        if(readString.indexOf("on_2") > 0) digitalWrite(led_2, HIGH);        
        if(readString.indexOf("off_2") > 0) digitalWrite(led_2, LOW);
        

//  PAGINA HTML      

         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         client.print("<body style='background-color:green'>");
         client.print("<html><head><title>Controllo Serra Arduino</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
         client.print("<font color='white'><h1 align='center'> Pagina di controllo </h1></font>");
                         client.print("

");
                         client.print("<table border='1'align='center'>");
                         client.print("<tr>");
                         client.print("<td align='center'>");
                                 client.print("<strong>Led 1</strong>");
                         client.print("</td>");
                         client.print("<td align='center'>");
                                 if (digitalRead(led_1)== true) client.print("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
                                 else client.print("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"OFF\" STYLE=\"background-color:#FF0000\"/>");
                         client.print("</td>"); 
                         client.print("<td align='center'>");
                         client.print("<strong >Log temperatura</strong>");           
                         client.print("</td>");
                         client.print("</tr>");
                         client.print("<tr>");
                         client.print("<td>");  
                                 client.print("<input type=\"button\" style=\"width:100px; height:55px\" value=\"On\" onclick =\" location.href='/?on_1'\">");
                         client.print("</td>");
                         client.print("<td>");
                                 client.print("<input type=\"button\" style=\"width:100px; height:55px\" value=\"Off\" onclick =\" location.href='/?off_1'\">"); 
                         client.print("</td>");
                         client.print("<td rowspan='5'>");
                                 client.print("<textarea readonly style=\"width:300px; height:200px\"  >"); 
                                 client.print("</textarea>");   
                         client.print("</td>");
                         client.print("</tr>");
                         client.print("<tr>");
                         client.print("<td align='center'>");
                                 client.print("<strong>Led 2</strong>"); 
                         client.print("</td>");
                         client.print("<td align='center'>");
                                 if (digitalRead(led_2)== true) client.print("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
                                 else client.print("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"OFF\" STYLE=\"background-color:#FF0000\"/>"); 
                         client.print("</td>");
                         client.print("</tr>"); 
                         client.print("<tr>");
                         client.print("<td>");
                                 client.print("<input type=\"button\" style=\"width:100px; height:55px\" value=\"On\" onclick =\" location.href='/?on_2'\">");
                         client.print("</td>");
                         client.print("<td>");
                                 client.print("<input type=\"button\" style=\"width:100px; height:55px\" value=\"Off\" onclick =\" location.href='/?off_2'\">");
                         client.print("</td>");
                         client.print("</tr>");
                         client.print("<tr>");
                         client.print("<td align='center'>");
                         client.print("<strong>Stato Ventola</strong>");
                         client.print("</td>");
                         client.print("<td td align='center'>");
                                  if( temp >28) client.print ("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
                                 else client.print("<input disabled=\"disabled\" maxLength=\"55\" size=\"10\" value=\"OFF\" STYLE=\"background-color:#FF0000\"/>"); 
                         client.print("</td>");
                         client.print("</tr>");
                         client.print("<tr>");
                         client.print("<td align='center'>");
                         client.print("<strong>Temperatura</strong>");
                         client.print("</td>");
                         client.print("<td align='center'>");
                         client.print("<textarea  readonly cols='12' row='2'  style='overflow:hidden;'>");
                         client.print( temp);
                         client.print("</textarea>");
                         client.print("</td>");
                         client.print("</tr>");
                         client.print("</table>"); 
          readString="";
            
        
        delay(1);
        client.flush();
        client.stop(); 
        }
      }
    }
  }
}


void usefun(){

 if(( temp = (( 5.0 * analogRead(inPin)*100.0 )/ 1023.0)>28)&&(funfunction==0))
 {
   funfunction=1;
      digitalWrite(fun,HIGH);  
 }
 if(( temp = (( 5.0 * analogRead(inPin)*100.0 )/ 1023.0)<=28)&&(funfunction==1))
 {
   funfunction=0;
  digitalWrite(fun,LOW);
 }
}

queste invece sono le righe che aggiungo per provare a far funzionare la sd card con rtc... ma non mi va niente :((

#include <Wire.h>
#include "RTClib.h"
#include <SD.h>

#define CS 4
 
RTC_DS1307 RTC;
char buffer[40];
int tempoprima= 0;
File myFile;
nel setup metto questo 
Serial.print("Initializing SD card...");
    pinMode(CS, OUTPUT);
    if (!SD.begin(CS)) {
      Serial.println("initialization failed!");
      return;
    }
    Serial.println("initialization done.");
    Wire.begin();
    RTC.begin();
    if (! RTC.isrunning()) {
      Serial.println("RTC is NOT running!");
      RTC.adjust(DateTime(__DATE__, __TIME__))
poi ho provato a creare una funziona chiamata log facendo un if con millis
 if(millis()-tempoprima>900000)
 {
  tempoprima=millis();
 sdWrite();
  
 }

e nella funzione metto questo
 sdWrite(){
DateTime now = RTC.now();
 
    sprintf(buffer,  "%02d/%02d/%d %02d:%02d:%02d %d %d %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), analogRead( A0 ), analogRead( A1 ), analogRead( A2 ), analogRead( A3 ) );
    Serial.println( buffer );
 
    myFile = SD.open("dati.log", FILE_WRITE);
    if (myFile) {
      myFile.println(buffer);
      myFile.close();
    } else {
      Serial.println("error opening dati.log");
    }

}

non ho idea di come far visualizzare invece il file nella pagina html :frowning: help...

  1. devi mettere il codice negli appositi tag, modifica il post, usa il pulsante # che ti mette lui i 2 tag. Il codice va racchiuso tra quei due tag. Altrimenti la pagina risulta illeggibile, alcune parti del codice non vengono scritte e sopratutto l'admin del forum ti cazzia.

  2. Che Arduino stai usando?
    Se la Uno, a me sembra che hai un programma grande abbastanza, quando metti anche la gestione RTC, da esaurire la poca memoria del micro (2K su Arduino e 8K su Mega)

si uso Arduino uno rev3 con ethernet shield :frowning: ho provato anche ad alleggerire lo sketch ma niente :(non va... per me sbaglio qualcosa.. ho letto qualcosa sul forum dei pin 10 e 4 che vanno tirati alti e bassi per poter scrivere e rifar funzionare il tutto ma non ho capito molto come dovrei fare?

Prova ad aggiungere nel setup() queste impostazioni, fammi sapere se è risolto o no il problema

pinMode(10, OUTPUT); 	
  digitalWrite(10, 1); 
  pinMode(4, OUTPUT);    
  digitalWrite(4, 1);

ciao

niente non va... :(oltre a non funzionare il log non va neanche la pagina web appena vado sull'indirizzo o mi visualizza parte del codice html oppure mi scarica automaticamente un file con dentro del codice se aperto con un editor di testo..
ve li posto entrambi...
quello che compare sulla pagina..

<input disabled="disabled" maxLength="55" size="10" value="OFF" STYLE="background-color:#FF0000"/><strong> Log temperatura</strong></tr><td><input type="button" style="width:100px; height:55px" value="On" onclick =" location.href='/?on_1'"><td><input type="button" style="width:100px; height:55px" value="Off" onclick =" location.href='/?off_1'"><td rowspan='5'><textarea readonly style="width:300px; height:200px"  ></textarea></tr><strong>Led 2</strong><input disabled="disabled" maxLength="55" size="10" value="OFF" STYLE="background-color:#FF0000"/></tr><td><input type="button" style="width:100px; height:55px" value="On" onclick =" location.href='/?on_2'"><td><input type="button" style="width:100px; height:55px" value="Off" onclick =" location.href='/?off_2'"></tr><strong>Stato Ventola</strong><td td align='center'><input disabled="disabled" maxLength="55" size="10" value="OFF" STYLE="background-color:#FF0000"/></tr><strong>Temperatura</strong><td><textarea  readonly cols='10' row='2'  style='overflow:hidden;'>25.90 C
</textarea></tr></table>

quello che mi scarica come file

a</tr><td><input type="button" style="width:100px; height:55px" value="On" onclick =" location.href='/?on_1'"><td><input type="button" style="width:100px; height:55px" value="Off" onclick =" location.href='/?off_1'"><td rowspan='5'><textarea readonly style="width:300px; height:200px"  ></textarea></tr><strong>Led 2</strong></tr><td><input type="button" style="width:100px; height:55px" value="On" onclick =" location.href='/?on_2'"><td><input type="button" style="width:100px; height:55px" value="Off" onclick =" location.href='/?off_2'"></tr><strong>Stato Ventola</strong><td td align='center'></tr><strong>Temperatura</strong><td><textarea  readonly cols='10' row='2'  style='overflow:hidden;'>25.90 C
</textarea></tr></table>

Prova a fare uno sketch singolo che scriva su SD, poi lo integri all'webserver.
ciao

pablos:
Prova a fare uno sketch singolo che scriva su SD, poi lo integri all'webserver.
ciao

ho gia provato a farne uno che fa solo il log della temperatura ma quando vado a integrarlo non funziona più niente :(si blocca tutto...:frowning: sbaglio a integrarlo? lo sketch che ho provato e questo.. come dovrei integrarlo...??

#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

const int chipSelect = 4;

int led=8;
int led1=9;
void setup()
{
  Serial.begin(9600);    //seriale aperta
  Serial.println("Preparo SD card...");

 pinMode(4, OUTPUT);   //pin 4 riservato al card reader     
 pinMode(8, OUTPUT);  // led controllo presenza della micro sd
 pinMode(9, OUTPUT);  
 
  if (!SD.begin(chipSelect)) 
  {                                                                  //se il modulo sd non viene correttamente inizializzato
    Serial.println("Errore! card non presente o non pronta! ");   //messaggio di errore sul nostro monitor seriale
    return;
  }
  else
  {
  Serial.println("Card pronta.");               //se correttamente inizializzata...
  }
  Wire.begin();            //inizializziamo l'RTC
  RTC.begin();
}


void loop()
{
  
  DateTime now = RTC.now();    //chiediamo il tempo all'RTC
  float analogPin=0; //pin analogico per la temperatura
 float sensor =0;  //variabile dove calcolo la temperatura
   

  //aspettiamo 5 secondi
  delay(5000);

  
  sensor = analogRead(analogPin);     //leggiamo e convertiamo la temperatura dal pin 0 di arduino
  sensor = (5.0 * sensor * 100.0)/1024.0;

  
  Serial.print("Temperatura: ");      //stampa sulla seriale temperatura e ora
  Serial.print(sensor);
  Serial.println(" C");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print(" - ");
  Serial.print(now.day(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.println(now.year(), DEC);  
  Serial.println(" ");
  
  
  File dataFile = SD.open("log.txt", FILE_WRITE); //apriamo in scrittura il file sulla sd

  
  if (dataFile) {                                         //Scriviamo sul file : TEMPERATURA - ORA:MINUTI:SECONDI   GIORNO/MESE/ANNO
    dataFile.print(sensor);
    dataFile.print(" - ");
    dataFile.print(now.hour(), DEC);
    dataFile.print(":");
    dataFile.print(now.minute(), DEC);
    dataFile.print(":");
    dataFile.print(now.second(), DEC);
    dataFile.print(" - ");
    dataFile.print(now.day(), DEC);
    dataFile.print("/");
    dataFile.print(now.month(), DEC);
    dataFile.print("/");
    dataFile.print(now.year(), DEC);
    dataFile.println(" ");

    dataFile.close();                 //chiudiamo il file
    digitalWrite(led,HIGH);           //facciamo lampeggiare il led di controllo
    delay(500);
    digitalWrite(led,LOW);
    delay(500);
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(500);
  }
  else {

    
    Serial.println("Errore apertura log.txt");     //errore nell'apertura del file 
    digitalWrite(led1,HIGH);
    delay(500);
    digitalWrite(led1,LOW);
    delay(500);
    digitalWrite(led1,HIGH);
    delay(500);
    digitalWrite(led1,LOW);
    delay(500);
 
  }

Ho notato una cosa... appena aggiungo anche solo la libreria SD.h la pagina smette di funzionare e mi scarica quel file che dicevo prima..
se invece aggiungo l'altra necessarria al funzionamento la Wire.h mi appare il codice a nel browser web..