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

Ir para baixo
SHIN
SHIN
Mensagens : 40
Data de inscrição : 12/03/2022
Escola : TIRADENTES

exercicio 1.12 Empty exercicio 1.12

Seg maio 16, 2022 1:56 pm
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 1.12
* Tema: Pinos Analógicos
* Atividade: Fazer o led alternar o brilho conforme a variação de luminosidade
* Descrição: Usar um pino analógico para controlar o brilho do led e uma entrada analógica para medir a luminosidade
* Hardware: Ligar um led em um pino digital configurado como SAÍDA ANALÓGICA e o LDR em uma entrada analógica
* Comandos: pinMode, analogRead, analogWrite,
* Dica1:A saída analógica aceita valores entre 0 e 255, e o conversor analógico possui 10 bits ou seja até 1024
* Dica2:Usar a função debug() para checar os valores maximos e minimos do LDR
* Dica3:Checar os valores de entrada maximo e minimo, lembrando que nesse circuito não é possível atingir o zero nem o valor máximo.
* Dica4:Converter a escala do LDR usando regra de 3,
* Dica5:Escrever o valor lido do LDR no led, tente também fazer o brilho inversamente proporcional a Luminosidade
*/

//DEFINICOES INICIAIS
#define led1 3 //Define o pino 3 como LED1
#define led2 5 //Define o pino 5 como LED2
#define ldr A1 //Define o pino A1 como LDR

//DECLARAcAO DE VARIAVEIS GLOBAIS
int valor; //Variável INT para valor
int valormenos; //Variável INT para valormenos

//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);
pinMode(led1,OUTPUT); //Define o LED como OUTPUT,
pinMode(led2,OUTPUT); //Define o LED 2 como OUTPUT.
}

//FUNÇÕES COMPLEMENTARES
void amongus(){ //Função debug, porém com um nome suspeito,
Serial.println(valor); //Manda o valor da variável "valor" para o monitor
Serial.print("Luminosidade: "); //Manda a descrição antes de mandar a variável "valor" para o monitor
}
//PROGRAMA PRINCIPAL

void loop() {
valor = analogRead(ldr)/3.8; //Lê o LDR e define-o como a variável valor, e divide-a por 3.8 para manter a proporção a luminosidade,
valormenos = analogRead(ldr)/-3.8; //Lê o LDR e define-o como a variável valor, e divide-a por -3.8 para manter a proporção a luminosidade e fazer o efeito inverso no LED 2,
amongus(); //Chama a função debug,
analogWrite(led1,valor); //Liga o LED com o valor da variável "valor", ligando-o quando a luminosidade está alta,
analogWrite(led2,valormenos); //Liga o LED com o valor da variável "valormenos", ligando-o quando a luminosidade está baixa.
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5039
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

exercicio 1.12 Empty Re: exercicio 1.12

Ter Jul 26, 2022 2:14 am
Oi Gustavo, nesse programa tem um detalhe sobre o calculo, que colocou o valor dividido por um numero positivo e depois por um negativo.
O correto para acertar esses calculos seria usar uma variável do tipo float, daí poderia fazer os cálculos de forma mais precisa, mas nem na videoaula esse tema foi tratado, então complemento aqui.
Outro detalhe é que falamos em fazer inversamente proporcional. E a estratégia é deduzir o valor aferido do valor máximo. Dividir por um numero negativo é uma outra estratégia que vou considerar.
A explicação para ter funcionado é que numa variável byte -1 é interpretado como 255 ou em binario 11111111 . Daí a conta acaba dando certo.
Nota 10.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos