08.11.2017 Views

arduino_básico_Michael_McRoberts

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capítulo 15 ■ Leitura e escrita de dados em um cartão SD<br />

351<br />

O loop do-while é algo que você ainda não viu. Ele funciona da mesma forma que um<br />

loop while. Entretanto, nesse caso, a condição é testada ao final do loop, e não em seu<br />

início. Enquanto o loop while não será executado se sua condição não for atendida, o<br />

loop do-while sempre executará seu código ao menos uma vez. O loop repetirá apenas<br />

se a condição for atendida.<br />

O loop incrementa i e utiliza o comando sizeof para encontrar o tamanho do array.<br />

Essa operação retorna o número de bytes do array. Você sabe que ele tem comprimento<br />

10, e que i inicia como 1, assim ele acessa primeiro 10 - 1, o nono elemento do array (o<br />

último elemento). Na sequência, temos 10 - 2, o oitavo elemento, e assim por diante,<br />

indo da direita para a esquerda. Depois, ele armazena nesse elemento o resultado de<br />

n%10, que representa o dígito mais à direita de qualquer número fornecido. Então, n<br />

é dividido por 10, o que faz com que você remova esse dígito. Depois, o processo se<br />

repete. Fazendo isso, obtemos o dígito mais à direita do número e o armazenamos no<br />

último elemento do array; depois, eliminamos esse dígito e repetimos o processo. Ao<br />

fazê-lo, o número é dividido em dígitos individuais e armazenado no array como uma<br />

string. Para converter o número em seu equivalente ASCII, utilizamos + '0' ao final.<br />

buf[sizeof(buf) - i] = n%10 + '0';<br />

Essa operação tem o efeito de inserir o dígito ASCII "0", adicionando-o ao valor de<br />

n %10. Em outras palavras, se o número fosse 123, teríamos 123 % 0 = 3. Assim o código<br />

ASCII para "0", que é 48, seria adicionado a 3, criando 51, que representa o código<br />

ASCII para "3". Fazendo isso, podemos converter o dígito em seu equivalente ASCII.<br />

Assim que o loop encerra, o conteúdo do array buff[] é escrito no arquivo, utilizando:<br />

f.write(&buf[sizeof(buf) - i], i);<br />

A função recebe um ponteiro com a localização dos dados sendo escritos, seguido<br />

pelo número de bytes que devem ser escritos. Essa é mais uma versão da função<br />

sobrecarregada write(). Depois, temos uma função cujo propósito é escrever uma<br />

string de texto no arquivo; seus parâmetros são o arquivo e um ponteiro para a string.<br />

void writeString(SdFile& f, char *str) {<br />

Novamente, você utiliza simplesmente um loop for para analisar cada elemento do<br />

array da string, caractere por caractere, e escrevê-los no arquivo:<br />

uint8_t n;<br />

for (n = 0; str[n]; n++);<br />

f.write((uint8_t *)str, n);<br />

Em seguida, temos a rotina de inicialização, que realiza todo o trabalho pesado. Como<br />

você deseja que esse código seja executado apenas uma vez, coloque todo o código<br />

na função setup(), e nada em loop().

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!