- Monica Moreno
- Mensagens : 731
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas
Exercício 3.18 Resolvido
Qua Out 27, 2021 9:07 am
/*
* CURSO DE ROBOTICA 2021
*
* Exercicio: 3.18
* Tema: Brilho do Led pelo terminal
* Atividade: Usar os numeros recebidos pelo terminal para comandar os leds e informa o status no display
* Descrição: Receber os caracteres pela serial, converter os dados recebidos como caractere em seu valor numerico. Exemplo recebe o ASCII - 49 e converte para valor 1
* 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, o LED deve estar numa saida PWM
* 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: A função Serial.available(); retorna a quantidade de bytes no buffer, carregar uma rotina for() e recuperar os dados
* Dica7: Para recuperar o numero pode usar exponenciação base 10, pois na primeira volta 10exp0=1, 10exp1=10, 10exp2=100 , vezes o numero recebido. A soma desses valores é o numero digitado
* Dica8: Para controlar o brilho do LED o valor recebido deve estar entre 0 e 255
* Dica9: 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
#define led1 3//Definido que o pino 3 irá se chamar "led1"
//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 Digits ;//Variável byte Digits
double Numbers = 0;//Variável double Numbers
//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 255 formato nnn :");//Ali o texto nas aspas vai ser enviado ao monitor serial
}
//FUNÇÕES COMPLEMENTARES
//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available()){//No caso da porta serial receber o valor,vai rodar o bloco abaixo
delay(25);//Tempo de 0,025 segundo
Digits = Serial.available();//Aqui a quantidade de Digits recebidos na porta serial sera atribuido a variavel Digits
for(double Accountant = Digits; Accountant > 0; Accountant --){// Ali o valor da variavel Accountant sera o valor da variavel Digits, a variavel Accountant foi declarada como double para ter maior precisão
Character = Serial.read();//Ali os valores lidos na porta serial vam ser atribuidos a variavel Character,cada algarismo vai ser tratado a cada volta
if(Character < 48 || Character > 57){//Ali se o Character recebido nao for algarismo,vai rodar o bloco abaixo
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
while(Serial.available()){//Enquanto estiver algo no buffer, vai rodar o bloco abaixo
Serial.read();//Ali vai ficar lendo os valores recebidos pela porta seial no caso so vai parar quando o buffer zerar
}
Numbers = 0;//Ali o valor da variavel Numbers vai passar a ser 0
break;//Ali o programa ira sair do bloco
}
Numbers += (Character- 48) * pow(10, (contador-1));//Ali o valor da Variavel Numbers vai ser a a soma do seu valor + o Character recebido 10 vezes , vai elevando ao tamanho do buffer menos 1
}
if(Numbers > 255){
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
}
}
if (Numbers {
Serial.print("Numbers = ");//Ali otexto entre aspas vai ser escrito no monitor serial
Serial.println(Numbers );//No caso o valor da variavel Numbers vai ser escrito no monitor serial, e o programa vai passar para a alinha de baixo
analogWrite(led,numero);//O valor da variavel Numbers sera escrito no led
lcd.clear();//Aqui o display vai ser resetado
lcd.print("Brilho = ");//Ali o texto acima sera escrito no display
lcd.print(Numbers );//Ali o valor da Variavel Numbers vai ser escrito no display
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
Serial.println("Digite um numero de 0 a 255 no formato nnn");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
}
}
Resolvido 3.18
* CURSO DE ROBOTICA 2021
*
* Exercicio: 3.18
* Tema: Brilho do Led pelo terminal
* Atividade: Usar os numeros recebidos pelo terminal para comandar os leds e informa o status no display
* Descrição: Receber os caracteres pela serial, converter os dados recebidos como caractere em seu valor numerico. Exemplo recebe o ASCII - 49 e converte para valor 1
* 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, o LED deve estar numa saida PWM
* 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: A função Serial.available(); retorna a quantidade de bytes no buffer, carregar uma rotina for() e recuperar os dados
* Dica7: Para recuperar o numero pode usar exponenciação base 10, pois na primeira volta 10exp0=1, 10exp1=10, 10exp2=100 , vezes o numero recebido. A soma desses valores é o numero digitado
* Dica8: Para controlar o brilho do LED o valor recebido deve estar entre 0 e 255
* Dica9: 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
#define led1 3//Definido que o pino 3 irá se chamar "led1"
//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 Digits ;//Variável byte Digits
double Numbers = 0;//Variável double Numbers
//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 255 formato nnn :");//Ali o texto nas aspas vai ser enviado ao monitor serial
}
//FUNÇÕES COMPLEMENTARES
//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available()){//No caso da porta serial receber o valor,vai rodar o bloco abaixo
delay(25);//Tempo de 0,025 segundo
Digits = Serial.available();//Aqui a quantidade de Digits recebidos na porta serial sera atribuido a variavel Digits
for(double Accountant = Digits; Accountant > 0; Accountant --){// Ali o valor da variavel Accountant sera o valor da variavel Digits, a variavel Accountant foi declarada como double para ter maior precisão
Character = Serial.read();//Ali os valores lidos na porta serial vam ser atribuidos a variavel Character,cada algarismo vai ser tratado a cada volta
if(Character < 48 || Character > 57){//Ali se o Character recebido nao for algarismo,vai rodar o bloco abaixo
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
while(Serial.available()){//Enquanto estiver algo no buffer, vai rodar o bloco abaixo
Serial.read();//Ali vai ficar lendo os valores recebidos pela porta seial no caso so vai parar quando o buffer zerar
}
Numbers = 0;//Ali o valor da variavel Numbers vai passar a ser 0
break;//Ali o programa ira sair do bloco
}
Numbers += (Character- 48) * pow(10, (contador-1));//Ali o valor da Variavel Numbers vai ser a a soma do seu valor + o Character recebido 10 vezes , vai elevando ao tamanho do buffer menos 1
}
if(Numbers > 255){
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
}
}
if (Numbers {
Serial.print("Numbers = ");//Ali otexto entre aspas vai ser escrito no monitor serial
Serial.println(Numbers );//No caso o valor da variavel Numbers vai ser escrito no monitor serial, e o programa vai passar para a alinha de baixo
analogWrite(led,numero);//O valor da variavel Numbers sera escrito no led
lcd.clear();//Aqui o display vai ser resetado
lcd.print("Brilho = ");//Ali o texto acima sera escrito no display
lcd.print(Numbers );//Ali o valor da Variavel Numbers vai ser escrito no display
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
Serial.println("Digite um numero de 0 a 255 no formato nnn");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
}
}
Resolvido 3.18
Re: Exercício 3.18 Resolvido
Ter Nov 16, 2021 9:44 pm
Oi Monica, tem uma variável chamada contador que está sendo usada na potenciação, ela não está declarada nem sendo incrementada.
Revisa o programa que não está funcionando.
Revisa o programa que não está funcionando.
- Monica Moreno
- Mensagens : 731
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas
Re: Exercício 3.18 Resolvido
Qua Nov 17, 2021 10:15 am
/*
* CURSO DE ROBOTICA 2021
*
* Exercicio: 3.18
* Tema: Brilho do Led pelo terminal
* Atividade: Usar os numeros recebidos pelo terminal para comandar os leds e informa o status no display
* Descrição: Receber os caracteres pela serial, converter os dados recebidos como caractere em seu valor numerico. Exemplo recebe o ASCII - 49 e converte para valor 1
* 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, o LED deve estar numa saida PWM
* 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: A função Serial.available(); retorna a quantidade de bytes no buffer, carregar uma rotina for() e recuperar os dados
* Dica7: Para recuperar o numero pode usar exponenciação base 10, pois na primeira volta 10exp0=1, 10exp1=10, 10exp2=100 , vezes o numero recebido. A soma desses valores é o numero digitado
* Dica8: Para controlar o brilho do LED o valor recebido deve estar entre 0 e 255
* Dica9: 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
#define led1 3//Definido que o pino 3 irá se chamar "led1"
//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 Digits ;//Variável byte Digits
int Numbers = 0;//Variável int Numbers
//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 255 formato nnn :");//Ali o texto nas aspas vai ser enviado ao monitor serial
}
//FUNÇÕES COMPLEMENTARES
//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available()){//No caso da porta serial receber o valor,vai rodar o bloco abaixo
delay(25);//Tempo de 0,025 segundo
Digits = Serial.available();//Aqui a quantidade de Digits recebidos na porta serial sera atribuido a variavel Digits
for(double Accountant = Digits; Accountant > 0; Accountant --){// Ali o valor da variavel Accountant sera o valor da variavel Digits, a variavel Accountant foi declarada como double para ter maior precisão
Character = Serial.read();//Ali os valores lidos na porta serial vam ser atribuidos a variavel Character,cada algarismo vai ser tratado a cada volta
if(Character < 48 || Character > 57){//Ali se o Character recebido nao for algarismo,vai rodar o bloco abaixo
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
while(Serial.available()){//Enquanto estiver algo no buffer, vai rodar o bloco abaixo
Serial.read();//Ali vai ficar lendo os valores recebidos pela porta seial no caso so vai parar quando o buffer zerar
}
Numbers = 0;//Ali o valor da variavel Numbers vai passar a ser 0
break;//Ali o programa ira sair do bloco
}
Numbers += (Character- 48) * pow(10, (Accountant-1));//Ali o valor da Variavel Numbers vai ser a a soma do seu valor + o Character recebido 10 vezes , vai elevando ao tamanho do buffer menos 1
}
if(Numbers > 255){
Serial.print("Numero invalido, digite novamente \n");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
}
}
if (Numbers) {
Serial.print("Numbers = ");//Ali otexto entre aspas vai ser escrito no monitor serial
Serial.println(Numbers );//No caso o valor da variavel Numbers vai ser escrito no monitor serial, e o programa vai passar para a alinha de baixo
analogWrite(led1,Numbers);//O valor da variavel Numbers sera escrito no led
lcd.clear();//Aqui o display vai ser resetado
lcd.print("Brilho = ");//Ali o texto acima sera escrito no display
lcd.print(Numbers );//Ali o valor da Variavel Numbers vai ser escrito no display
Numbers = 0;//Aqui o Valor da variavel Numbers passara a ser 0
Serial.println("Digite um numero de 0 a 255 no formato nnn");//Ali no caso o texto entre aspas vai ser escrito no monitor serial ,e no caso o programa vai ir a linha de baixo
}
}
3.18 feito
Professor no arduino diz que esta tudo ok mas quando vou testar nao roda!
Re: Exercício 3.18 Resolvido
Sex Dez 10, 2021 12:45 am
Oi Monica, testei e funcionou direitinho, mas o comentário que fez na principal linha do programa vou ter que revisar.
Numbers += (Character- 48) * pow(10, (Accountant-1));//Ali o valor da Variavel Numbers vai ser a a soma do seu valor + o Character recebido 10 vezes , vai elevando ao tamanho do buffer menos 1
Na verdade aqui é realizada uma conta usando potencia de base 10 para recuperar o número.
Por exemplo se receber o numero 123 , nesse caso o for roda 3 vezes e faz o seguinte.
numero = (3 * 10^0) + (2 * 10^1) + (1 * 10^2); //entenda 10^2 le-se 10 elevado ao quadrado, é uma potencia de base 10
Lembrando na matemática que todo numero elevado a 0 (zero) é igual a 1, todo numero elevado a 1 é igual a ele mesmo e 10^2 é igual a 100, logo a conta fica
numero = 3 * 1 + 2 * 10 + 1* 100
numero = 3 + 20 + 100
numero = 123
e recuperou o numero digitado que veio caractere a caractere
Nota 10.0
Numbers += (Character- 48) * pow(10, (Accountant-1));//Ali o valor da Variavel Numbers vai ser a a soma do seu valor + o Character recebido 10 vezes , vai elevando ao tamanho do buffer menos 1
Na verdade aqui é realizada uma conta usando potencia de base 10 para recuperar o número.
Por exemplo se receber o numero 123 , nesse caso o for roda 3 vezes e faz o seguinte.
numero = (3 * 10^0) + (2 * 10^1) + (1 * 10^2); //entenda 10^2 le-se 10 elevado ao quadrado, é uma potencia de base 10
Lembrando na matemática que todo numero elevado a 0 (zero) é igual a 1, todo numero elevado a 1 é igual a ele mesmo e 10^2 é igual a 100, logo a conta fica
numero = 3 * 1 + 2 * 10 + 1* 100
numero = 3 + 20 + 100
numero = 123
e recuperou o numero digitado que veio caractere a caractere
Nota 10.0
Permissões neste sub-fórum
Não podes responder a tópicos