Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
lucca senn dallagassa
lucca senn dallagassa
Mensagens : 333
Data de inscrição : 09/03/2020
Idade : 17
Escola : Lindaura Ribeiro Lucas

exercicio 3.16 resolvido Empty exercicio 3.16 resolvido

Sáb Ago 28, 2021 9:33 am
/*
* CURSO DE ROBOTICA 2021
*
* Exercicio: 3.16
* Tema: Calculadora Simples com numeros ascii
* Atividade: Enviar para o display a soma de dois numeros de 0 a 9 recebidos pelo terminal
* Descrição: Receber o caractere pela serial, converter o numero recebido como caractere em seu valor numerico. Depois somar os dois
* Hardware: Display ligado RS=_pino D12; EN=_pino D13; D4=_pino D4; D5=_pino D5; D6=_pino D6; D7=_pino D7, o terminal usa a porta USB do arduino
* Comandos: Serial.begin(9600); lcd.print(); Serial.available(); Serial.print();
* Dica1: A configuração da serial usa velocidade padrão de 9600, poderia ser alterado caso necessite maior performance
* Dica2: Na interface do arduino abrir o terminal em ferramentas - Monitor serial ou ctr+shift+M
* Dica3: Enviar para o terminal \n para nova linha ou \r para retorno de carro
* Dica4: na tabela ASCII os numeros são assim: 0=48;1=49;2=50;3=51;4=52;5=53;6=54;7=55;8=56;9=57
* Dica5: Uma forma simples de chegar ao valor numerico é subtrair o valor recebido de 48, o resultado é igual ao numero recebido
* Dica6: Enviar o valor para o terminal e o display
* Dica7: Checar se o valor enviado está correto e enviar mensagem de erro se os valores não forem numeros
*/

//DEFINICOES INICIAIS
#include //A biblioteca com as funções do display está carregada

//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd(12,11,10,9,8,7);//Os pinos serão ligados nessa sequência ao display
byte caractere;//Variável para ser atribuído o valor dos caracteres, ou caracteres, recebidos pela porta serial, para serem escritos no display
byte num1 = 0;//Variável para ser atribuído o primeiro valor recebido pela porta serial
byte num2 = 0;//Variável para ser atribuído o segundo valor recebido pela porta serial
byte resultado;//Variável para ser atribuído o valor do resultado da soma entre os dois valores recebidos pela porta serial

//INICIALIZAÇÃO DO HARDWARE
void setup () {
Serial.begin(9600);//Porta serial inicializada com velocidade de 9600 bps
lcd.begin(16,2);//Display inicializado, o display usado possui 16 colunas e 2 linhas
Serial.println("DIGITE UM VALOR DE 0 a 9: ");//O texto entre aspas será enviado para o monitor serial
}





//FUNÇÕES COMPLEMENTARES




//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available() > 0){//Se a porta serial receber um valor, irá rodar o bloco abaixo
caractere = Serial.read();//Os valores lidos na porta serial serão atribuídos à variável caractere
if(caractere < 48 || caractere > 57){
Serial.print("valor incorreto, digite novamente");//A mensagem enytre aspas será escrita no monitor serial
caractere = 0;//O valor da variável caractere passará a ser 0
}
if(num1 ==0){//Se a variável num1 não tiver valor atribuído,´irá rodar o bloco abaixo
num1 = caractere;//O valor da variável caractere será atribuído à variável num1
}
else{//Se a variável num1 já tiver valor atrinuído, irá rodar o bloco abaixo
num2 = caractere;//O valor da variável caractere será atribuído à variável num2
}
Serial.print("numero 1 = ");//O texto entre aspas será enviado para o monitor serial
Serial.println(num1);//O valor da variável num1 será enviado para o monitor serial
Serial.print("numero 2 = ");//O texto entre aspas será enviado para o monitor serial
Serial.println(num2);//O valor da variável num2 será enviado para o monitor serial
Serial.print("VERIFICANDO... = ");//O texto entre aspas será enviado para o monitor serial
Serial.println(num1 && num2);//A compáração dos valores das variáveis num1 e num2 irá ser enviada para o display, e só irá ser 1 se os dois valores forem diferentes de 0
}
if(num1 && num2){//Se os valores das duas variáveis forem diferentes de 0, irá rodar o bloco abaixo
num1 = num1 - 48; //Como os algarismos começam no número decimal 48, para convertê-los para ASCII, basta subtrair por 48
num2 = num2 - 48; //Como os algarismos começam no número decimal 48, para convertê-los para ASCII, basta subtrair por 48
resultado = num1 + num2;//O valor da variável resultado será o valor da soma dos valores das variáveis num1 e num2
lcd.clear();//O display será resetado
lcd.setCursor(0,0);//O cursor irá para o início da primeira linha do display
lcd.print(" : ");//O texto entre aspas será escrito no display
lcd.setCursor(0,1);//O cursor irá para o início da segunda linha do display
lcd.print(num1);//O valor da variável num1 será escrito no display
lcd.setCursor(2,1);//O cursor irá para a coluna 2 da segunda linha do display
lcd.print("+");//O texto entre aspas será escrito no display
lcd.setCursor(4,1);//O cursor irá para a coluna 4 da segunda linha do display
lcd.print(num2);//O valor da variável num2 será escrito no display
lcd.setCursor(6,1);//O cursor irá para a coluna 6 da segunda linha do display
lcd.print("=");//O textos entre aspas será escrito no display
Serial.println(resultado);//O valor da variável resultado será enviado para o monitor serial
Serial.print("\n");//Irá pular uma linha no monitor serial
caractere = num1 = num2 = 0;//Os valores das variáveis caractere, num1 e num2 serão zerados
Serial.println("DIGITE UM VALOR DE 0 a 9: ");//O texto entre aspas será enviado para o monitor serial
}
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5715
Data de inscrição : 11/02/2019
Idade : 53
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

exercicio 3.16 resolvido Empty Re: exercicio 3.16 resolvido

Ter Set 07, 2021 6:58 pm
Muito bom Lucca, Nota 10.0

Para melhorar o programa poderia colocar o resultado da soma no display, mas como é apenas apresentacao não afeta a nota.
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos