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:
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