sexta-feira, 11 de maio de 2018

Verificando se houve gravação no arquivo - Datalogger com Arduino



O arquivo no SD conectado ao Arduino pode dar algum problema, assim a gravação de dados é interrompida. Na primeira versão do nosso código, era feita a verificação se o arquivo abria para a gravação.

O inclusive verificava duas vezes, abrindo o arquivo e fechando diversas vezes sem motivo. O problema é que existe uma outra questão:

O SD pode estar funcionando, o arquivo abrindo normal para gravação e nenhum dado ser escrito nele. Essa situação o nosso código não previa, pois durante os testes nunca ocorreu, mas vai que ocorra?

Então uma forma de testar se está ocorrendo gravação é verificar se o tamanho do arquivo após a suposta gravação é maior que o tamanho anterior. Se ele for igual significa que não houve gravação de dados nele.

Então passaremos a ter uma tripla verificação em nosso datalogger:
  • Se o SD está inserido (ocorre uma vez)
  • Se o arquivo foi aberto (ocorre sempre)
  • Se o tamanho do arquivo após a gravação é superior ao tamanho antes da gravação (sempre)
Claro que antes de modificar o nosso código real vamos criar um novo programa para testar se o código funciona.

Como o código é simples e pequeno vou disponibilizar abaixo, basta copiar a colar em um novo arquivo do Arduino:



Como visto acima o código está inteiramente comentado.

Ao rodar o código e monitorar a serial vai ser possível ver o tamanho antigo, o atual e ver que cada vez que o loop ocorre o arquivo aumenta 25 bytes. No momento que não ocorrer mais gravação serão retornadas mensagens de erro. Assim quando houver o erro poderemos tomar alguma ação, como acionar um buzzer.

Você também pode ter verificado um "bug" na primeira verificação do loop, onde o sistema acusa erro. Se você não tentou solucionar por conta própria a solução é o seguinte:
unsigned long tamanhoAtual = 10;
Assim quando fizer a primeira verificação não haverá o erro e os valores serão corrigidos para o correto logo no próximo loop.

Espero que esse código tenha sido útil.

Nenhum comentário:

Postar um comentário