7 – Eletrônica digital com Arduino – Introdução à linguagem C, parte 3

Nesse post citarei o básico da biblioteca string e um pouco sobre memória.
Quando criamos uma variável do tipo char para guardar um valor de confirmação (por exemplo ‘y’ ou ‘n’ para yes/no, respectivamente) não precisamos nos preocupar com o tamanho e local da memória para alocar essa variável. Quando o programa for executado, a variável será alocada em um endereço de memória livre e mesmo que o usuário digite mais de uma letra (por exemplo, um ‘yes’ invés de apenas ‘y’), apenas o primeiro byte (a primeira letra) será armazenada em memória. Um exemplo:

#include <stdio.h>

void main()

{

char yesNo;

printf(“Confirma (y/n)?:  “);

scanf(“%c”,&yesNo);

printf(“Voce respondeu %cn”);

}

O exemplo faz uso da função scanf. Seu uso típico é scanf(TIPO,ENDERECO_VARIAVEL)

Repare que o tipo especificado foi char, seguido do endereço de memória para alocar o valor. O ‘&’ seguido da variável diz ao programa que o resultado do scanf deve ser guardado no endereço de memória onde está a variável yesNo.

Se a intenção fosse receber uma string do usuário (uma string é uma palavra ou frase, tratado em C como um array de chars), seria bom assegurar de que o usuário não consiga sobrecarregar a memória com dados além do necessário. A melhor maneira para limitar isso é definir a variável com um tamanho máximo fixo:

char palavra[10];

Desse modo, haverá 9 posições de memória para armazenar bytes, enquanto o décimo é o terminar nulo ‘ 0’.

Mas se por exemplo o usuário devesse digitar uma senha que não fosse menor do que 5 bytes e não fosse maior que 9 bytes, seria necessário avaliar a entrada. Colocando um pouco de inteligência no programa que solicita uma senha ao usuário:

//biblioteca de entrada e saida padrao

#include <stdio.h>

//biblioteca que manipula arrays de char

#include <string.h>

//corpo do programa

void main()

{

//definicao da variavel para guardar senha de 9 bytes de tamanho maximo

char senha[10] = {”};

//mensagem para interagir com o usuario

printf(“Digite uma senha (minimo:5 maximo:9): “);

//capturar o que o usuario digitar e colocar na variavel senha

scanf(“%s”,&senha);

//variavel para medirmos o tamanho da senha

int tamanho_da_senha;

//medir o tamanho da senha

tamanho_da_senha = strlen(senha);

//condicional IF. Entraremos em condicionais e loops no proximo post

if (tamanho_da_senha < 5){

printf(“No minimo 5, mas voce digitou %d. Saindo…n”,tamanho_da_senha);

}

}

Esse programa lê o valor digitado pelo usuário, guarda na variável senha e depois mede o tamanho da variável. Em seguida, a condição if (que significa SE em português) avalia SE a variável é menor que 5. Se for, exibe uma mensagem para o usuário dizendo que a senha é menor que o tamanho mínimo solicitado.

Repare que todo o bloco de instruções fica dentro de chaves.

Utilizamos a função strlen da biblioteca string para descobrir o tamanho da variável. strlen é abreviatura de string lenght.

Utilizaremos isso para passar valores ao Arduino ou para solicitar informações sobre sensores, ou ainda para efetuar login no servidor web do módulo de rede que implementaremos futuramente.

Na declaração da variável senha repare na utilização de {‘ 0’}. Isso preenche todos os bytes do array com o terminador nulo. Toda a string deve terminar com ” para que o programa saiba onde a variável termina na memória, caso contrário o programa pode exibir informações em um endereço que não pertence a variável.

Da biblioteca string ainda utilizaremos outras funções, mas o exemplo de post é exclusivamente para aprender a controlar um pouco mais a memória, uma vez que haverá limitação de uso ao programar em Arduino.

Há também a possiblidade de conversão de tipos; um float pode ser convertido para string ou para int, dependendo da necessidade. Um exemplo de conversão foi feito em outro post, mas também será retomado quando chegar a hora de implementar o servidor web.

No próximo post vamos entrar em condicionais, seguidamente em laços de repetição, então iniciaremos códigos que interajam com arduino. Modificaremos o projeto de acender LED para que interaja com o usuário assim que encerrar a parte de laços e condicionais.

Faremos a compilação dos códigos de exemplo citados no codeblocks quando encerrada a introdução em C e posteriores compilações serão diretamente em Arduino.

Essa é uma boa hora para adquirir seu kit que deve levar vários dias para chegar.

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta