Eletrônica digital com Arduino – Introdução a linguagem C – parte 7 – CORREÇÃO

Escrevi esse post no modo HTML do editor do wordpress e acabei perdendo algumas partes do código, além de que no loop eu cometi um erro. Me perdoem pelo erro e vou descrever o que estava errado:

while – O while deve dar 5 voltas, então a comparação é entre o contador (que deve ser incrementado) e o número 5:

while (counter < 5){

...

}

A comparação dos valores ESTAVA sendo feita com um if. Nesse caso, tive problema na edição do texto. Agora o if está lá no exemplo abaixo, comparando o valor do usuário com o valor limite:

if (valor_do_usuario > valor_limite){

...

}

No printf, fiz uma subtração do valor excedente para exibi-lo na tela.

Redobrarei os cuidados para não acontecer mais isso, perdoem-me.

Como descrito no artigo anterior, para fazer uma leitura do teclado utilizamos a função scanf(). Mas essa função não vai funcionar para o Arduino, ela é simplesmente para testes no computador.
A comunicação do PC (ou notebook) com o Arduino é feita através de comunicação serial pela porta USB. Então, para trocar informações com o Arduino sem uma interface de rede, utiliza-se as funções da biblioteca serial, read() e write(). Como o Arduino do meu filho ainda não chegou, não faremos exemplos dessa comunicação ainda.
A outra forma de se comunicar com Arduino é através de uma interface de rede; uma controladora ethernet cujo circuito pode ser montado em casa ou se preferir algo mais profissional, um ethernet shield. Os shields são placas controladoras que se acoplam ao Arduino, que por sua vez possui a biblioteca necessária para a comunicação com o dispositivo.
O exercício solicitado no artigo anterior se referia a fazer leituras a partir do teclado e verificar se o valor é maior que 18. O problema desse exercício está justamente no delay; como se está fazendo um exemplo utilizando o scanf, o terminal ficará parado até que o usuário digite um valor. Existe sim uma forma de fazer um timeout, mas não é uma boa idéia adentrarmos em C, uma vez que o foco é Arduíno. Então, ignore o timeout e pegue 5 entradas do usuário. O resultado seria algo como:


//criar uma variavel para guardar o valor limite
int valor_limite = 18;



void main(){
//criar um contador para um loop de 5 voltas
int counter = 0;
//criar variavel para pegar valor do usuario
int valor_do_usuario = 0;
//iniciar o loop
while (counter < 5){

//incrementar o contador

counter += 1;
//se excedeu o limite, exibe a mensagem e o quanto passou do limite.
// para saber quanto passou do limite, basta subtrair o limite do valor do usuario.
// Isso pode ser feito diretamente no printf().

if (valor_do_usuario > valor_limite){
printf("nnn ALARME!!! Excedeu o limite em %d graus!!!nnn",valor_do_usuario-valor_limite);
}
}
}

Existe comando para limpar buffer do teclado, para fazer timeout caso o usuário demore a entrar com um valor e muitas outras coisas que não estão descritas aqui.
É possível gerar estatísticas desses poucos dados de exemplo, tirando média, fazendo aproximações, determinando novos limites automaticamente e muito mais, mas pouco a pouco chegaremos no objetivo que é o robô e logo que começarmos mexer com sensores a coisa ficará mais divertida.

Apesar de estarmos utilizando int em todos nossos exemplos, é muito comum o uso de float para sensores, com precisão de 1/100. A precisão pode ser ampliada, mas dificilmente essa variação terá alguma aplicação.

Por enquanto vamos ficar nesse último artigo até que chegue o tão esperado Arduino do meu filho. Encomendei também motores de passo, para fazermos um robô andar para frente e para trás. Para deslocamento lateral, utilizaremos um servo motor, que tem a capacidade de deslocamento de 180 graus. É possível modificar um servo motor para fazer 360, mas se houver essa necessidade, melhor ter um motor de passo mesmo.

Nosso robô será construído sobre protoboard, então recomendo a compra de uma mini-protoboard para que o robô não fique com aparência de uma carreta devido ao comprimento das protoboads tradicionais.

Utilizaremos nele um sensor de luminosidade e faremos ele seguir o rastro de uma lanterna. Utilizaremos também um display de 4 dígitos para exibir a distância percorrida em metros.

Os conceitos importantes passados até aqui e que devem ser revistos são:
-condicionais (if, else)
-loop (while e for)
-variáveis (int,float,char)
-funções (printf, scanf)

É tudo o que foi dado até agora e é o suficiente para iniciarmos. Perceba que a maioria do texto é explicativo, mas o conteúdo é bastante simples. Se alguém tiver dúvidas, faça o post aqui ou entre em contato por meu endereço de mail, mas absorvam essas informações para podermos seguir com tranquilidade quando iniciarmos em Arduino.
Boa diversão!

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