Tweeter Logger (ethernet+sd)

Hello!

I’am almost finishing my tweeter logger which also runs http server, but here is the deal, I want to save the tweeter in my SD cart, but when I load the SdFat library my program stops working, or even if i just plug the SD card it stops running…

Anyone know if i can run bolth ethernet + sd? I know it uses same SPI, is there a way I could turn ethernet off, turn SD on and write the file, then turn back ethernet on?

thats my ethernet shield :
http://www.dealextreme.com/p/ethernet-shield-with-wiznet-w5100-ethernet-chip-tf-slot-118061
thx =)

#include <SPI.h>
#include <Ethernet.h>

const int reiniciar_XXX = 8;
const int reiniciar_YYY = 7;
// entre com MAC e IP para seu controlador.
// O IP vai depender da sua rede:
byte mac[] ={0xDE,0xAD,0xBF,0xEF,0xFE,0xED}; 
byte ip[] ={192,168,0,15};
byte gateway[] ={192,168,0,1};
byte subnet[] ={255,255,255,0};

// inicia porta 80 para servidor HTTP
EthernetServer server(80);
// inicia a biblioteca:
EthernetClient client;
// delay entre pedidos
const unsigned long tempoRefrescamento = 60000;  
// pagina do twitter URL
char nomeServidor[] = "api.twitter.com";  
//fez pedido quando conectou?
boolean pedidos; 
//ultima vez que vc estava conectado em milesegundos
unsigned long tempoUltimaTentativa = 0;            
String linhaAtual = "";              // string para guardar texto de servidor
String tweet = "";                   // string para guardar o tweet
String tweetAnterior = "";
boolean lendoTweet = false;          // se vc está atualmente lendo o tweet

void setup() 
{
  pinMode(reiniciar_XXX, OUTPUT);
  pinMode(reiniciar_YYY, OUTPUT);
  //reserva espaço para as strings:
  linhaAtual.reserve(256);
  tweet.reserve(150);
  //abre comunicação serial e espera a porta abrir:
  Serial.begin(9600);
  //tenta conexão DHCP:
  Serial.println("Tentando pegar um IP usando DHCP:");
  if (!Ethernet.begin(mac)) 
    {
     Ethernet.begin(mac,ip,gateway,subnet);
    }
  Serial.print("Meu IP:");
  Serial.println(Ethernet.localIP());
  //inicia servidor
  server.begin();
  // conecta no Twitter:
  conectandoServidor();
}

void loop()
{  
  // atualiza pagina web de status dos PC's
  paginaStatus();
  delay(30);
  // inicia atualizacao do twiiter
  if (client.connected()) 
  {
    if (client.available()) 
    {
      // ler os bytes de entrada:
      char inChar = client.read();
      // adiciona os bytes de entrada ao final da linha:
      linhaAtual += inChar; 
      // se vc receber "newline" nova linha, limpa a linha:
      if (inChar == '\n') 
      {
        linhaAtual = "";
      } 
      // se a linha atual terminar com <text>, vai ser seguida do tweet:
      if (linhaAtual.endsWith("<text>")) 
      {
        // o tweet esta começando. Limpa a string tweet:
        lendoTweet = true; 
        tweet = "";
      }
      // se vc esta atualmente lendo os bytes do tweet, adicona eles a String do tweet,
      if (lendoTweet) 
      {
        if (inChar != '<') 
        {
          tweet += inChar;
        } 
        else 
          {
          // se vc receber um caracter "<", chegou ao final do tweet:
          lendoTweet = false;
          Serial.println(tweet);  
          Serial.print("Tweet anterior: ");
          Serial.println(tweetAnterior);
            //Cadastrando computadores e comandos para reiniciar         
            if(tweet==">reiniciar .XXX" && tweetAnterior!=tweet)
             {
               Serial.println("Reiniciando computador .XXX");
               digitalWrite(reiniciar_XXX, LOW);
               delay(1000);
               digitalWrite(reiniciar_XXX, HIGH);
               delay(1000);
               digitalWrite(reiniciar_XXX, LOW);
             } 
           
           if(tweet==">reiniciar .YYY" && tweetAnterior!=tweet)
             {
               Serial.println("Reiniciando computador .YYY");
               digitalWrite(reiniciar_YYY, LOW);
               delay(1000);
               digitalWrite(reiniciar_YYY, HIGH);
               delay(1000);
               digitalWrite(reiniciar_YYY, LOW);
             }          
          Serial.println("");
          tweetAnterior=tweet;
          // fecha conexão com servidor:
          client.stop(); 
          
        }
      }
    }   
  }
  else if (millis() - tempoUltimaTentativa > tempoRefrescamento) 
  {
    // se vc não esta conectado, e passou 2 minutos des da sua ultima conexão
    // então tenta reconectar:
    conectandoServidor();
  }
}

void conectandoServidor() 
{
  // tenta conectar e espera em milesegundos:
  Serial.println("conectando no servidor...");
  if (client.connect(nomeServidor, 80)) 
  {
    Serial.println("fazendo pedido de HTTP...");
    // faz pedido HTTP GET para o twitter:
    client.println("GET /1/statuses/user_timeline.xml?screen_name=viniciusrdo&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com");
    client.println();
  }
  // observa o tempo dessa tentativa de conexão:
  tempoUltimaTentativa = millis();
}

void paginaStatus()
{
  delay(30);
  {
  // procura por clints de entrada
  EthernetClient client = server.available();
  if (client) 
    {
    //Serial.println("Novo client conectado."); DEBUG DA CONEXÃO SUJA A TELA
    // um pedido de http termina com uma linha em branco
    boolean linhaAtualEmBranco = true;
    while (client.connected()) 
      {
       if (client.available()) 
         {
          char c = client.read();
          //Serial.write(c);// DEBUG DA CONEXÃO SUJA A TELA
          // se chegou ao final da liha (recebeu um caracter "newline"
          // (\n) e a linha é branca, o pedido de http terminou,então 
          // você pode mandar uma resposta
          if (c == '\n' && linhaAtualEmBranco) 
            {
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println();
    
              client.println("<HTML>");
              client.println("<HEAD>");
              client.println("<TITLE>RemOpt - Remote</TITLE>");
              client.println("</HEAD>");
              client.println("<BODY>");
              client.println("<center>");
              client.println("<H1>RemOpt - Controle Remoto </H1>");
              client.println("</center>");
              
              client.println("Tempo de funcionamento:");
              long tempo=((millis()/1000)/60);
              if(tempo<=1)
                {
                 client.println(tempo);
                 client.print(" minuto");
                }
              if(tempo>=2)
                {
                 client.println(tempo);
                 client.print(" minutos");
                }    
              client.print("
");
              client.print("Meu IP: ");
              client.print(Ethernet.localIP());
              client.print("
");
              client.print("Ultimo Tweet: ");
              client.print(tweet);
              client.print("

");
              
              // adiciona uma meta de refrescamento, o browser vai pegar dados a cada 5 segundos:
              client.println("<meta http-equiv=\"refresh\" content=\"30\">");
    
          client.println("</BODY>");
          client.println("</HTML>");
          break;
            }
        if (c == '\n') 
          {
          // esta iniciando uma nova linha
          linhaAtualEmBranco = true;
          } 
        else if (c != '\r') 
          {
          // recebeu um caracter na linha atual
          linhaAtualEmBranco = false;
          }
       }
    }
    // delay para o browser pegar os dados
    delay(3);
    // fecha conexão
    client.stop();
    //Serial.println("Client disconectado"); DEBUG DA CONEXÃO SUJA A TELA
    }
  }
}

it has a built in tf-slot? which should work with sd-cards too, then why would you use an externalt sd-card?

the lib that comes with the ethernet shield is built to make them work together, right?