Ler dados introduzidos pelo Utilizador.

article featured image

Esta aula pretende ensinar a ler dados, através do monitor série, do utilizador. Vai elevar o nosso grau de programação a um novo patamar.

Vamos continuar a utilizar o nosso circuito da aula 3.

Neste momento, o algoritmo será igual a este:

Lembrem-se sempre da chamada de atenção que eu fiz na aula 4: evitem ao máximo o copiar / colar. Escrevam sempre o vosso código e aprendam a detetar e corrigir os erros, é essencial.

Voltando à nossa aula de hoje, aprender a ler dados introduzidos pelo utilizador, vamos precisar utilizar algumas instruções novas, nomeadamente:

Serial.available() - indica o número de bytes (carateres) lidos na porta série;

while(){ } - estrutura de repetição baseada numa condição, repete enquanto a condição se verificar;

Serial.parseInt() - pega no valor introduzido e devolve um inteiro longo;

Serial.read() - lê a entrada da porta série.

 

Olhando para o exercício da aula anterior, o que tinhamos era dois LEDs que acendiam alternadamente cinco vezes. Este número era definido aquando a criação das variáveis:

Agora, o que vamos fazer é deixar que seja o utilizador do circuito a indicar esse valor. Assim, vamos modificar estas duas linhas:

A partir deste momento temos de ler estes dois valores (numRedPisca e numYellowPisca). Para esta leitura vamos precisar acrescentar as seguintes instruções para cada uma das variáveis:

Após a leitura dos dois valores, o nosso circuito estará de novo em funcionamente com os LEDs a piscar o número de vezes que o utilizador indicar.

No entanto, pode surgir uma dificuldade: o valor de numYellowPisca não é lido. Se esta situação acontecer, é sinal que aquando da leitura da variável, Serial.available() é maior que zero, por este motivo, o algoritmo não pára e não dá tempo para a introdução do valor por parte do utilizador.

Como resolver esta situação? Eu resolvi utilizando antes de cada leitura as seguintes instruções:

Se Serial.available() é maior que zero é sinal que já contém algum valor, valor esse que irá passar para a variável t. A partir deste momento, Serial.available() vai passar a ser zero, o que nos vai permitir fazer a leitura das variáveis que pretendemos.

No final deste exercício passamos a ter o seguinte código no void setup() e void loop():

Repare que, para não repetir o mesmo código duas vezes, criei um procedimento limpaEntrada().

Espero que tenham gostado da aula e cá vos espero na próxima. Obrigado.

 

Exercício

Tendo compreendido a aula, modifique o código para que as questões feitas ao utilizador sejam feitas apenas uma vez.