Introdução à programação C para Arduino
Conversão de Texto para Número Inteiro
Figura 82 - Atividade 16 – Números aleatórios
gerados
CONVERSÃO DE TEXTO PARA NÚMERO
INTEIRO
Obs. os números lidos pela placa são interpretados como texto, então devemos converter os números lidos de texto para número inteiro pela função atoi(valor_lido); .
ATIVIDADE_017 – Agora vamos desenvolver um código onde a placa vai gerar um número entre 1 e 15, vai ler um número pela porta serial, vai escrever de volta o número gerado e o lido utilizando a porta serial e ainda vai acender um led amarelo quando o número sorteado for maior que o lido, vai acender um led vermelho quando o número sorteado for menor que o lido e por último vai acender um led verde se os números forem iguais. Sem dúvida, esta é a atividade mais complexa deste livro, tanto do ponto de vista da lógica.
CÓDIGO
//VARIÁVEL QUE ARMAZENA O VALOR LIDO COM ATÉ 4 CARACTERES, MAS NÃO É NÚMERO, É TEXTO
char valor_lido[4]="";
int numero_lido=0; //VARIÁVEL QUE ARMAZENA O TEXTO LIDO CONVERTIDO PARA NÚMERO
int numero_sorteado=0; //VARIÁVEL QUE ARMAZENA O VALOR SORTEADO
int i = 0; //VARIÁVEL CONTADORA, UTILIZADA NO WHILE
void setup() {
//HABILITA AS PORTAS DIGITAIS 2,3 E 4 PARA OUTPUT
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
Serial.begin(9600); //HABILITA A PORTA SERIAL PARA COMUNICAR NA TAXA 9600
randomSeed(analogRead(0)); //SEMENTE PARA AJUDAR A GERAR NÚMEROS PSEUDOALEATÓRIOS
}
void loop() {
//PORTAS DIGITAIS 2,3 E 4 EM ESTADO LOW (LED APAGADO)
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delay(500); //ESPERA MEIO SEGUNDO COM OS LEDS APAGADOS
//ROTINA DE LEITURA
while(Serial.available()){
valor_lido[i] = Serial.read();
i++;
}
i = 0; //REINICIA A VARIÁVEL CONTADORA PARA QUANDO HOUVER OUTRA LEITURA
numero_lido=atoi(valor_lido); //CONVERTE O TEXTO valor_lido EM NÚMERO INTEIRO numero_lido
numero_sorteado=random(1,16); //SORTEIA UM NÚMERO ENTRE 1 E 15
//ROTINA QUE TESTA SE O NÚMERO SORTEADO É MAIOR, IGUAL OU MENOR QUE O NÚMERO LIDO
if(numero_sorteado>numero_lido)
digitalWrite(2,HIGH);
else if(numero_sorteado == numero_lido)
digitalWrite(3,HIGH);
else if(numero_sorteado < numero_lido)
digitalWrite(4,HIGH);
else
digitalWrite(3,LOW);
//ROTINA QUE ESCREVE OS NÚMEROS LIDO E SORTEADO NA PORTA SERIAL
Serial.print(numero_sorteado);
Serial.print(" - ");
Serial.println(numero_lido);
delay(2000); //ESPERA 2 SEGUNDOS COM O LED ACESO
}
Figura 83 - Atividade 17 – Esquema de ligação na
placa física