Meus amigos, estou com um problema.

Preciso fazer um download de um arquivo texto para o cartao sd do arduino, porém nao estou conseguindo...

           ...Ou melhor, as vezes dá certo as vezes nao, isso que ta me fazendo quebrar a cabeça.

peguei um exemplo a partir do site do arduino e to tentando adaptar.

O que acontece?

   

       O codigo pede para colocar "f" para baixar do ftp para o sd, quando faço isso ele aparece no serial que o arquivo foi baixado com Êxito, até mostra o conteudo do arquivo, porem no cartao sd aparece o arquivo texto vazio.

        Em raras vezes da certo mais 99 % das vezes nao baixa, mesmo mostrando o conteudo do arquivo que estava no servidor na tela serial.

alguem poderia me dar uma sugestão?

 

Exibições: 985

As respostas para este tópico estão encerradas.

Respostas a este tópico

se vc diz que há casos onde baixa com sucesso, então significa que o sketch funciona, ainda mais que vc relata que o conteúdo é exibido na tela do serial monitor.

Será que o defeito intermitente não é no cartão SD? Vc já experimentou trocar de cartão ?

Está usando que arduino? Se for UNO, já tentou usar um MEGA?

Estou usando o mega o sd é novo mais vou fazer uns testes, nao tinha pensado nisso.

RESOLVIDO  - (Obrigado imhugo  por responder a minha pergunta)

O problema era na programação

segue abaixo o codigo completo se alguem precisar de algo parecido

no codigo ele baixa o arquivo do servidor e salva na pasta TEST1.TXT

 

#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
// comment out next line to write to SD from FTP server
//#define FTPWRITE

// this must be unique
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };

// change to your network settings
IPAddress ip( 192, 168, 0, 12 );
IPAddress gateway( 192, 168, 0, 1 );
IPAddress subnet( 255, 255, 255, 0 );

// change to your server
IPAddress server( **, **, **, ** );

EthernetClient client;
EthernetClient dclient;

char outBuf[128];
char outCount;

// change fileName to your file (8.3 format!)
char fileName[9] = "test.txt";
File myFile;
void setup()
{
Serial.begin(9600);

digitalWrite(10,HIGH);

if(SD.begin(4) == 0)
{
Serial.println(F("SD init fail"));
}

Ethernet.begin(mac, ip, gateway, gateway, subnet);
digitalWrite(10,HIGH);
delay(2000);
//SD.remove("TEST.TXT");
// SD.remove("test.txt");

Serial.println(F("Ready. Press f or r"));
}

void loop()
{
byte inChar;

inChar = Serial.read();

if(inChar == 'f')
{
if(doFTP()) Serial.println(F("FTP OK"));
else Serial.println(F("FTP FAIL"));
}

if(inChar == 'r')
{
readSD();
}

}

File fh;

byte doFTP()
{
#ifdef FTPWRITE
fh = SD.open(fileName,FILE_READ);
#else
SD.remove(fileName);
fh = SD.open(fileName,FILE_WRITE);
#endif

if(!fh)
{
Serial.println(F("SD open fail"));
return 0;
}

#ifndef FTPWRITE
if(!fh.seek(0))
{
Serial.println(F("Rewind fail"));
fh.close();
return 0;
}
#endif

Serial.println(F("SD opened"));

if (client.connect(server,21)) {
Serial.println(F("Command connected"));
}
else {
fh.close();
Serial.println(F("Command connection failed"));
return 0;
}

if(!eRcv()) return 0;


client.println(F("USER usuario"));

if(!eRcv()) return 0;

client.println(F("PASS senha"));

if(!eRcv()) return 0;

client.println(F("SYST"));

if(!eRcv()) return 0;

client.println(F("Type I"));

if(!eRcv()) return 0;

client.println(F("PASV"));

if(!eRcv()) return 0;

char *tStr = strtok(outBuf,"(,");
int array_pasv[6];
for ( int i = 0; i < 6; i++) {
tStr = strtok(NULL,"(,");
array_pasv[i] = atoi(tStr);
if(tStr == NULL)
{
Serial.println(F("Bad PASV Answer"));

}
}

unsigned int hiPort,loPort;

hiPort = array_pasv[4] 8;
loPort = array_pasv[5] & 255;

Serial.print(F("Data port: "));
hiPort = hiPort | loPort;
Serial.println(hiPort);

if (dclient.connect(server,hiPort)) {
Serial.println(F("Data connected"));
}
else {
Serial.println(F("Data connection failed"));
client.stop();
fh.close();
return 0;
}

#ifdef FTPWRITE
client.print(F("STOR "));
client.println(fileName);
#else
client.print(F("RETR "));
client.println(fileName);
#endif

if(!eRcv())
{
dclient.stop();
return 0;
}

#ifdef FTPWRITE
Serial.println(F("Writing"));

byte clientBuf[64];
int clientCount = 0;

while(fh.available())
{
clientBuf[clientCount] = fh.read();
clientCount++;

if(clientCount > 63)
{
dclient.write(clientBuf,64);
clientCount = 0;
}
}

if(clientCount > 0) dclient.write(clientBuf,clientCount);

#else
while(dclient.connected())
{
while(dclient.available())
{
char c = dclient.read();
fh.write(c);
Serial.write(c);
// teste

myFile = SD.open("test1.txt", FILE_WRITE);
myFile.print(c);
myFile.close();

//fim teste
}
}
#endif

dclient.stop();
Serial.println(F("Data disconnected"));

if(!eRcv()) return 0;

client.println(F("QUIT"));

if(!eRcv()) return 0;

client.stop();
Serial.println(F("Command disconnected"));

fh.close();
Serial.println(F("SD closed"));
return 1;
}

byte eRcv()
{
byte respCode;
byte thisByte;

while(!client.available()) delay(1);

respCode = client.peek();

outCount = 0;

while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);

if(outCount < 127)
{
outBuf[outCount] = thisByte;
outCount++;
outBuf[outCount] = 0;
}
}

if(respCode >= '4')
{
efail();
return 0;
}

return 1;
}


void efail()
{
byte thisByte = 0;

client.println(F("QUIT"));

while(!client.available()) delay(1);

while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}

client.stop();
Serial.println(F("Command disconnected"));
fh.close();
Serial.println(F("SD closed"));
}

void readSD()
{
fh = SD.open(fileName,FILE_READ);

if(!fh)
{
Serial.println(F("SD open fail"));
return;
}

while(fh.available())
{
Serial.write(fh.read());


}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço