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

Ir para baixo
Monica Moreno
Monica Moreno
Mensagens : 720
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Exercício 3.16 resolvido Empty Exercício 3.16 resolvido

Seg Out 18, 2021 9:52 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 //Sera carregada as funções do display na biblioteca

//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd(12,11,10,9,8,7);//Os pinos serão ligados nessa sequência ao display
byte Character;//Variável byte Character
byte Num1 = 0;//Variável byte Num1
byte Num2 = 0;//Variável byte Num2
byte Result;//Variável byte Result

//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);//Inicializa a Porta Serial
lcd.begin(16,2);//O Display sera inicializado,o display usado possui 16 colunas e 2 linhas
Serial.println("Vai digitar um numero de 0 a 9 : ");//Ali o texto nas aspas vai ser enviado ao monitor serial
}
//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available() > 0){//Ali se a Porta Serial receber o valor vai rodr o bloco abaixo
Character = Serial.read();//Aqui os valores lidos no Porta Serial serao atribuido a variavel Character
if(Character < 48 || Character > 57){
Serial.print("O valor esta incorreto, digite novamete");//As mensagens entre aspas vai ser ensrita no monitor Serial
Character = 0;//Ali o valor da variavel Character vai passar a ser 0
}
if(Num1 ==0){//No caso da variavel num1 nao estiver o valor atribuido,vai rodar o bloco abaixo
Num1 = Character;//Ali o valor da variavel Character vai ser atribuido a variavel num1
}
else{//No caso da variavel num1 ja estiver o valor atribuido,vai rodar o bloco abaixo
Num2 = Character;//Ali o valor da variavel Character vai ser atribuido a variavel num2
}
Serial.print("numero 1 = ");//Ali o texto entre aspas vai ser enviado ao monitor serial
Serial.println(Num1);//Aqui o valor da variavel num1 vai ser enviado para o monitor serial
Serial.print("numero 2 = ");//Ali o texto entre aspas vai ser enviado ao monitor serial
Serial.println(Num2);//Aqui o valor da variavel num2 vai ser enviado para o monitor serial
Serial.print("Teste de Matematica = ");//Ali o texto entre aspas vai ser enviado ao monitor serial
Serial.println(Num1 && Num2);//Ali a comparação de valores das variaveis num1,num2 vai ser enviado ao display,que ira ser 1,se os valores forem diferentes de 0
}
if(Num1 && Num2){;//Ali os valores das variaveis foremdiferente de 0,o bloco abaixo ira rodar
Num1 = Num1 - 47; //Os algarimos vam começar como numero decimal 47 e para convertê-los para ASCII,e so suntrair por 48
Num2 = Num2 - 47; //Os algarimos vam começar como numero decimal 47 e para convertê-los para ASCII,e so suntrair por 48
Result = Num1 + Num2;//No caso o valor da variavel Result sera o valor da soma dos valores num1 e num2
lcd.clear();//O display vai ser resetado
lcd.setCursor(0,0);//Aqui o cursor ira para o inicio da primeira linha do display
lcd.print("Result : ");//Ali o texto entre aspas vai ser enviado ao display
lcd.setCursor(0,1);//Aqui o cursor ira para o inicio da segunda linha do display
lcd.print(Num1);//Ali o valor da variavel num1 vai ser escrita no display
lcd.setCursor(2,1);//Ali o cursor ira para a coluna 2 segunda linha do display
lcd.print("+");//Ali o texto entre aspas vai ser escrito no display
lcd.setCursor(4,1);//Ali o cursor ira para a coluna 4 segunda linha do display
lcd.print(Num2);//O valor da variável num2 será escrito no display
lcd.setCursor(6,1);//Ali o cursor ira para a coluna 6 segunda linha do display
lcd.print("=");//Ali o texto entre aspas vai ser escrito no display
lcd.setCursor(8,1);//Ali o cursor ira para a coluna 8 segunda linha do display
lcd.print(Result);//Ali o valor da variavel Result vai ser escrito no display
Serial.println("resultado da soma");//Ali o texto entre aspas vai ser enviado para o monitor serial
Serial.print(Num1);//Ali o valor da variavel num1 vai ser enviado para o monitor serial
Serial.print(" + ");//Ali o texto entre aspas vai ser enviado para o monitor serial
Serial.print(Num2);//Ali o valor da variavel num2 vai ser enviado para o monitor serial
Serial.print(" = ");//Ali o texto entre aspas vai ser escrito no display
Serial.println(Result);//Ali o valor da variavel Result vai ser enviado para o monitor serial
Serial.print("\n");//Vai pular uma linha no monitor serial
Character = Num1 = Num2 = 0;//Ali os valores da variavel Character, num1 num2 vam ser zerados
Serial.println("digite um numero de 0 a 9 : ");//Ali o texto nas aspas vai ser enviado ao monitor serial
}
}

Resolvido 3.16 Wink Very Happy
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

Exercício 3.16 resolvido Empty Re: Exercício 3.16 resolvido

Qua Nov 03, 2021 1:05 am
Oi Monica,
Corrigi o exercício e a lógica está correta, porém o resultado não.
Dai estava vendo a forma que fez a conversão de ASCII para decimal. Usamos a tecnica simples de subtrair de 48, mas voce subtraiu de 47, daí a soma não bate.
Vou dar nota 8.0 até corrigir o programa
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos