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.
Tendo compreendido a aula, modifique o código para que as questões feitas ao utilizador sejam feitas apenas uma vez.