Olá amigos.
Estou criando um sistema que carrega uma frase do SDcard e salva em uma variável.
Meu interesse é ter esses dados (que de tempo em tempo mudarão), salvos em variáveis que serão comparadas.
Mas estou com dificuldade em passar um texto que está salvo em um arquivo txt do SDcard para uma variável. Toda vez que uso o comando variavel = myFile.read() o retorno da variável é -1.
Fiz uma simulação dessa idéia criando um arquivo1.txt e ao transferir os dados para uma variável o retorno está sendo -1.
Alguém pode me orientar onde estou errando?
#include <SD.h>
#include <SPI.h>
File myFile;
File myFile1;
String textosd = "Eu sou um texto";
String novasd = "Serei alterado";
int pinoSS = 10; // Pin 53 para Mega / Pin 10 para UNO
void setup() { // Executado uma vez quando ligado o Arduino
Serial.begin(9600); // Define BaundRate
pinMode(pinoSS, OUTPUT); // Declara pinoSS como saída
if (SD.begin()) { // Inicializa o SD Card
Serial.println("SD Card pronto para uso."); // Imprime na tela
}
myFile = SD.open("arquivo1.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile) { // Se o Arquivo abrir imprime:
myFile.println(textosd); // Escreve no Arquivo
novasd = myFile.read(); // Aqui que não está gravando de forma correta o texto na variável
myFile.close(); // Fecha o Arquivo após escrever
}
myFile1 = SD.open("arquivo2.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile1) { // Se o Arquivo abrir imprime:
myFile1.println(novasd); // Escreve no Arquivo
myFile1.close(); // Fecha o Arquivo após escrever
}
Serial.println(novasd);
}
void loop() {
// Como a função é executada somente uma vez, esta área permanece em branco
}
String textosd = "Eu sou um texto";
...
myFile.println(textosd); // Escreve no Arquivo
println()
Description
Print data, followed by a carriage return and newline, to the File, which must have been opened for writing. Prints numbers as a sequence of digits, each an ASCII character (e.g. the number 123 is sent as the three characters '1', '2', '3').
Syntax
file: an instance of the File class (returned by SD.open())
data (optional): the data to print (char, byte, int, long, or string)
Penso nao estar a gravar devido ao método println esperar um array de carateres (string em lower case) e tu estas a passar um String (Um objecto do tipo String)
Eles são muito diferentes.
Tenta assim:
#include <SD.h>
#include <SPI.h>
File myFile;
File myFile1;
char textosd[] = "Eu sou um texto";
char novasd[20] ;
int pinoSS = 10; // Pin 53 para Mega / Pin 10 para UNO
void setup() { // Executado uma vez quando ligado o Arduino
Serial.begin(9600); // Define BaundRate
pinMode(pinoSS, OUTPUT); // Declara pinoSS como saída
if (SD.begin()) { // Inicializa o SD Card
Serial.println("SD Card pronto para uso."); // Imprime na tela
}
myFile = SD.open("arquivo1.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile) { // Se o Arquivo abrir imprime:
myFile.println(textosd); // Escreve no Arquivo
myFile.read(novasd,sizeof(novasd)); // Aqui que não está gravando de forma correta o texto na variável
myFile.close(); // Fecha o Arquivo após escrever
}
myFile1 = SD.open("arquivo2.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile1) { // Se o Arquivo abrir imprime:
myFile1.println(novasd); // Escreve no Arquivo
myFile1.close(); // Fecha o Arquivo após escrever
}
Serial.println(novasd);
}
void loop() {
// Como a função é executada somente uma vez, esta área permanece em branco
}
Muito obrigado por ajudar com a resposta dada a minha dúvida.
O código que postou não retornou o valor esperado mas me ajudou bastante a clarear a visão e continuar tentando resolver essa questão.
Além de estar errando com a variavel (que você me direcionou), também estava tentando passar o valor dentro da função de escrita. Descobri que é necessário dar o close e depois abrir novamente sem ser escrita para que o valor passe para a variavel.
Enfim... você foi de muito ajuda a direcionar minha programação. Muito obrigado!!
Segue o código funcionando.
Obrigado a todos que de alguma forma tentaram me ajudar!
#include <SD.h>
#include <SPI.h>
File myFile;
File myFile1;
char textosd[] = "Eu sou o texto";
char novasd[20] ;
char senha;
int pinoSS = 10; // Pin 53 para Mega / Pin 10 para UNO
void setup() { // Executado uma vez quando ligado o Arduino
Serial.begin(9600); // Define BaundRate
pinMode(pinoSS, OUTPUT); // Declara pinoSS como saída
if (SD.begin()) { // Inicializa o SD Card
Serial.println("SD Card pronto para uso."); // Imprime na tela
}
myFile = SD.open("arquivo1.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile) { // Se o Arquivo abrir imprime:
myFile.println(textosd); // Escreve no Arquivo
myFile.close(); // Fecha o Arquivo após escrever
}
myFile = SD.open("arquivo1.txt");
if (myFile) {
// read from the file until there's nothing else in it:
while (myFile.available()) {
myFile.read(novasd,sizeof(novasd));
}
// close the file:
myFile.close();
}
myFile1 = SD.open("arquivo2.txt", FILE_WRITE); // Cria / Abre arquivo .txt
if (myFile1) { // Se o Arquivo abrir imprime:
myFile1.println(novasd); // Escreve no Arquivo
myFile1.close(); // Fecha o Arquivo após escrever
}
Serial.println("A variavel é: ");
Serial.println(novasd);
}
void loop() {
// Como a função é executada somente uma vez, esta área permanece em branco
}