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

Ir para baixo
avatar
gustavo
Mensagens : 72
Data de inscrição : 18/03/2023
Escola : lindaura

exercicio 3.18 Empty exercicio 3.18

Seg Set 30, 2024 2:05 pm
/*
* CURSO DE ROBOTICA 2019
*
* 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
#define led 9 //pino 9 vai ter o nome de led
#include //biblioteca global
//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd (7,6,5,4,3,2);
byte caractere = 0;//devine variave e coloca com o valor 0
double num = 0;//devine variave e coloca com o valor 0
byte digitos;//devine variave
//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);//numero de cliclos
lcd.begin(16, 2);//tamanhpo da tela
Serial.println("digite um numero de 0 a 255 no formado nnn"); //vai mandar para a placa

}

//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available()){
delay(25);//tempo de espera
digitos = Serial.available();
for(double count = digitos; count > 0 ; count --){
caractere = Serial.read();
if(caractere < 48 || caractere > 57){
Serial.println("Numero invalido, digite novamente"); //vai mandar para a placa
while(Serial.available()){
Serial.read();//linpa blaca
}
num = 0; //num vai ter valor de zero
break;//quebra o ciclo
}
num += (caractere - 48) * pow(10 , (count-1));
}
if(num > 255){ //se num maior qur 255 vai
Serial.println("numero invalido , digite novamende"); //vai mandar para a placa
num = 0;//num vai ter valor de zero
}
}
if(num){//se num vai
Serial.println(led, num); //led vai ecender com o valor de num
analogWrite(led, num);//led vai ecender com o valor de num
lcd.clear();//linpa blaca
lcd.print("brilho = "); //vai mandar para a placa
lcd.print(num); //vai mandar para a placa
num = 0;//num vai ter valor de zero
}
}
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos