Estou precisando separar as linhas do meu arquivo txt. A Ideia é mais ou menos essa:
Crieium arquivo de texto no seguinte formato
0|10:10,10:20,10:30
Onde o "0" é o dia da semana segunda a sexta (0 ate 6)
Os Demais São horas Separadas por virgulas....
Agora olhando isso:
0|10:10,10:20,10:30
1|09:15,10:30,11:45
Como podemo separa as linhas do txt (horarios.txt) criando algo mais ou menos assim:
#include <SD.h>
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Inicializando o Cartao...");
pinMode(9, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Falha na Inicializacao.");
return;
}
Serial.println("Cartao Inicializado.");
}
char resultado[] = [color=red]linhas vindas do txt no SD como array[/color]
void horarios() {
for (i = 0; i /span> sizeof(resultado) - 1; i++){
Serial.println("Resultados da Linha Numero ");
Serial.print(i);
Serial.println(resultado(i));
}
}
void loop(){
horarios();
}
Alguem me ajuda com a parte do txt? Como criar aquela variável Resultado?
Isto e lento e provavelmente mau para o cartao... mas nao sera algoa assim:
unsigned int c= 0;
char mensagem[20];
mensagem[19] = '\0';
while ((c = myFile.read) != '\n' && c < 19) {
mensagem[c++] = c;
}
c = 0;
Serial.print(mensagem);
Mais coisa menos coisa este codigo copia uma linha que esta no cartao para a variavel mensagem. Poderas ter de ver como e que o caracter de new line esta guardado se e so \n ou se tem mais qualquer coisa, mas deve ser isso.
Ahh, o codigo tambem nao ve se ja chegou ao final do ficheiro... isso e algo a ter em conta tambem.
Guardar as horas em formato string é uma má política porque eventualmente tens de converter para numeros para saber quando ligar/desligar a luz.
No codigo que eu meti, a variável mensagem vai colocar o texto para segunda feira. Logo de seguida deves converter e guardar para números.
typedef struct {
unsigned int horas[4];
} hora_luz;
hora_luz[7]; //isto vai ficar com as horas/datas. Domingo é 0
//para acederes a primeira hora de ligar a luz de segunda feira
hora_luz[1].horas[0] = ....
Quanto ao modo de guardar as coisas no ficheiro... bom, podes em vez de meter tudo em texto, começar a facilitar logo a conversão. Ou seja, em vez de meteres 7:45, podes meter 0745. Isto torna a conversão do texto em numeros extremamente mais simples.
Assumindo então a variável mensagem que eu deixei no pedaço de código anterior e que o formato da string é "1|0915|1030|1145"
//inicio de linha...
char toConv [5];
unsigned char dia_semana = 0;
toConv[4] = '\0';
dia_semana = mensagem[0] - 48;
for (unsigned char i = 0; i <4; i ++ ) { //passar os 4 campos de horas.
for (unsigned char j = 0; j<4; j++) { //cada uma das horas.
toConv[j] = mensagem[2+j];
hora_luz[dia_semana].horas[i] = atoi(toConv);
}
}
Depois naquela estrutura que criei em cima, os indices pares ligam a luz e os indices impares desligam.