Arquivo de Texto

Bom Dia Pessoal,

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?

Obrigado

Já pesquisaste pelos exemplos??!?

Sim bubulindo, inclusive um seu, segue:

char c;
int i = 0;
while((c = myFile.read()) != '|'); //encontra uma pipe... adicionar um timeout... 
//chegamos aqui, lemos a primeira pipe. 

while ((c = myFile.read()) != '|') { vamos copiar uma mensagem... 
   mensagem[i++] = c; 
}
mensagem[i] = '\0'; 
i = 0; 

while ((c = myFile.read()) != '|') { vamos copiar uma mensagem... 
   numero[i++] = c; 
}
numero[i] = '\0'; 
i = 0;

Mas não consegui transformar em um array que me retorna assim:

resultado[0] = "0|10:10,10:20,10:30"
resultado[1] = "1|09:15,10:30,11:45"

e assim por diante, com todas as linhas do txt

Obrigado

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.

Entendi bubuino, vou realizar testes...

Contudo como me aconselharia a gravar os dados de horários?

Abraços

Espera aí... Tu queres uma matriz e não um vector...

O meu código não faz isso. Porque é que queres guardar tanto dado em memória do arduino?

Eu não sei o que pretendes fazer... Logo a minha opinião poderá não ser a mais acertada. Por outro lado, tu já idealizaste o que queres fazer...

Quero construir um projeto que, em determinados horários de um dia da semana ele acenda uma lampada ex:

Segunda-Feira acenda as:
07:00
07:45
09:00
11:00

Terça-Feira acenda as:
08:00
10:00
12:30
13:20

E assim por diante.... Ate domingo.

Se tiver uma forma mais fácil de fazer, ou mais correta eu tento fazer....
Desculpe este é meu primeiro projeto no Arduíno.

Obrigado

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.

Tenta ver por aqui onde chegas...