Pessoal, Boa noite!

Estou com dúvidas de como conseguir comparar os resultados obtidos de uma leitura de dados em um cartão SD no arduino.

Estou conseguindo retornar os dados, porem não consigo por eles em uma variável do tipo Array para posteriormente conseguir comparar os resultados.

Estou postando meu condigo onde efetuo a contagem de linhas encontradas e depois os resultados. 

Também tem um print de como está exibindo, essa parte está OK, porem não consigo comparar os Dados

dez de já agradeço!

Abraços!

Exibições: 164

Anexos

Responder esta

Respostas a este tópico

Marcio,

ao que parece seu arquivo de log sempre vai ter a mesma extrutura, ou seja, o primeiro valor de hora estará na linha n e o último no final do arquivo. Dentro do for que está imprimindo, você faz o preenchimento do array:

....for do print....

if (indice_do_for >= linha_inicial_desejada){

 dado[indice] = valor_da_linha;

}

com isso registra no array os dados da posição n até o final. Depois disso poderá fazer uso do seu array.

Olá TO, Obrigado!

não entendi muito bem, mas acho que vc se refere nessa parte do código:

for(int i=0;i<=Linhas;i++){             //Laço de repetição para contar    
while(Cartao_SD.available()){ //Enquanto encontrar algum caracter...
Hor = Cartao_SD.readString(); //Variável Hor recebe o conteúdo do cartão
}
Serial.print(Hor);                    //Imprime o conteúdo
} 


exatamente, neste trecho considere um if onde a condição vai ser i >= linha onde começa os resultados

Segue anexo do novo esquema de gravação para facilitar a quebra de dados.

Anexos

missão quase impossível quebrar essa string

no momento de salvar de uma quebra de linha para cada hora, isso vai facilitar a leitura posterior

Ficou exatamente como eu lhe disse.

Agora é só fazer um loop, exemplo:

Long horario[]; //para armazenar os horarios em segundos

int k = 0;

for(int i=0; i<hor.length(); i+=8){

             String atual = hor.substring(i,9); //pega uma substring de 8 elementos

             String hora = atual.substring(0,2)// pega hora

             String minuto = atual.substring(3,5)// pega minuto

             String segundo = atual.substring(6,8) //pega segundo

             horario[k] = (long) hora.toInt()*(24*60) + minuto.toInt()*60 + segundo.toInt(); //armazena a hora em segundos

             k++; //incrementa o índice de horas

}

Dessa maneira será possível obter o valor do RTC (convertido em segundos) e comparar com o valor armazenado em horario[];

Legal EDS!

Obrigado!

Cara a IDE do arduino não está deixando declarar a variável "long horario[]; " 

está retornando um erro dizendo que tenho que especificar um tamanho entre [];

"storage size of 'horario' isn't known"

declarei desta forma:

int k = 0;
long horario[k];

e veja o resultado à baixo!

Hora 1: 214761474
Hora 2: 1769499
Hora 3: 396542
Hora 4: 1572870
Hora 5: 0
Hora 6: 567541760
Hora 7: 19
Hora 8: 1638934
Hora 9: 1246382594
Hora 10: -1296911694
Hora 11: -1296911694
Hora 12: -1296911694
Hora 13: -1296911694
Hora 14: -1296911694
Hora 15: -1296911694
Hora 16: -1296911694
Hora 17: -1296911694
Hora 18: -1296911694
Hora 19: -1296911694
Hora 20: -1296911694
Hora 21: -1296911694
Hora 22: -1296911694
Hora 23: -1296911694
Hora 24: -1296911694

Será que devo usar alguma biblioteca específica?

Desculpe, MAP

É tanto JAVA que esqueço do C++.

Vc colocou o k como a quantidade de horários a serem armazenados. 

Pena que estava ZERO... então esses valores que vc obteve são sujeiras...

Vc deve estabelecer uma constante suficiente para o número máximo de registros de horas que vc terá no arquivo txt. Por exemplo: 

long horario[24]; // 0 a 23 posições de horários

ou pode também pegar o valor conforme o  tamanho da string obtida em hor:

int qt = hor.length()/8;//tamanho do string dividido por 8...

long horario[qt];

Tenta ai...

Bom dia EDS, antes de mais nada, bom domingo a você!

Obrigado por me ajudar.

Tentei das duas formas como você citou à cima, porem ambas não dá certo, ai fiz um debug na variável "String hora". Veja o  resultado:

Hora 1: 01
Hora 2: 0
Hora 3: 2:
Hora 4: 2:
Hora 5: 2:
Hora 6: 2:
Hora 7: 2:
Hora 8: 2:
Hora 9: 2:
Hora 10: 2:
Hora 11: 2:
Hora 12: 2:
Hora 13: 2:
Hora 14: 2:
Hora 15: 2:
Hora 16: 2:
Hora 17: 2:
Hora 18: 2:
Hora 19: 2:
Hora 20: 2:
Hora 21: 2:
Hora 22: 2:
Hora 23: 2:
Hora 24: 2:

Repare que a partir da 2º linha começa os problemas, ele lista apenas o primeiro ZERO e dai por diante, repete o segundo registro de hora em todas as linhas até o fim.

EDS! 

Consegui fazer, hehe!

Tive que mudar algumas coisas, veja o anexo de como ficou o Código:

Não precisei converter para segundos. Tinha um problema no laço "for" onde ele conseguia ler apenas os dois primeiros registros de horas, e depois repetia o segundo registro nos demais, assim como está na minha resposta anterior.

Veja o código e você irá entender o que eu fiz, no laço for e na comparação das horas.

Meu amigo muito obrigado, um grande abraço, e se um dia precisar da minha ajuda, conte comigo!

Anexos

Parabéns, MAP!

Desculpe por demorar responder, mas foi até bom vc tentar mais um pouco e resolver!Apenas um comentário sobre o seu IF...

if((h2==h1 && m2==m1 && s2.toInt()==s1.toInt()) || (h2==h1 && m2==m1 && s2.toInt()==s1.toInt()+1) || (h2==h1 && m2==m1 && s2.toInt()==s1.toInt()+2)){...}

Eu prefiro fazer IF aninhados, mais fácil procurar erros.
Então vc pode ir comentando também:

if(h2==h1){ //se a hora for igual
     if(m2==m1){ //...e se o minuto for igual
         if(s2.toInt() >= s1.toInt() && s2.toInt() <= s1.toInt() + 2) { // ...entre dois valores
             //... aqui executar procedimento
         }
     }
}

Observe que, nesse caso, se h2 <> h1, o resto do código nem é executado.
Abraços!

Olá meu amigo EDS!

Concordo com você, todo código deve ser comentado e feito da forma mais simples possível.

Obrigado!

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço