Pessoal estou com erro na leitura do meu sensor LM35.
tenho um ARDUINO UNO, SHIELD LCD C/ BOTOES, LM35.
É O SEGUINTE: fiz o codigo de LM35+LCD funciona normal ! (mostra a temperatura perfeita)
Quando acrescenta LIB.BOTAO ele fica com erro.
entra na programação 2 analogRead(); e me parece que da erro no arduino de ler SIMULTANEAS ENTRADAS ANALOGICAS.
coloquei delay mas nao solucionou, verifiquei os Gnd's, alimentação fiz de tudo ...
botão = A0 (DADO PELA SHIELD).
sensor = A1.
OBS:
( sensor nao estabiliza na temperatura correta mesmo sem apertar os botoes)
(mas na Serial ele mostra a temperatura normal)
=\
Tags:
Olá Marcos,
Posta o sketch pra que possamos te ajudar.
A leitura do botão está dentro de alguma rotina de interrupção?
Pode ser que a leitura do sensor esteja sendo feita antes do AD estabilizar, tente o seguinte, quando for fazer a leitura do sensor, faça uma primeira leitura e descarte, conte um delay de 1ms e faça uma nova leitura.
Abraço.
coloquei os botoes pra brincar.... depois eu vou implementar, mas quero tirar esse deefeito
#include <LiquidCrystal.h>
#define sensor 1 // Define o pino A1 como “sensor”
int Ventrada; // Variável para ler o sinal do pino do Arduino
float Temperatura; // Variável que recebe o valor convertido para temperatura.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE; // when all others fail, return this...
}
void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("TEMP"); // print a simple message
}
void loop()
{
Ventrada = analogRead (sensor); /* Manda o Arduino ler o pino e armazena o valor em “Ventrada”. */
Temperatura = (Ventrada * 0.0048875855); ///
Temperatura = Temperatura * 100; /// Conversão do valor obtido atravez da porta analogica para um valor “usavel”
lcd.setCursor(0,1); // move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttons
switch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnRIGHT:
{
lcd.print("RIGHT ");
break;
}
case btnLEFT:
{
lcd.print("LEFT ");
break;
}
case btnUP:
{
lcd.print("UP ");
break;
}
case btnDOWN:
{
lcd.print("DOWN ");
break;
}
case btnSELECT:
{
lcd.print("SELECT");
break;
}
case btnNONE:
{
lcd.setCursor(0, 1);
lcd.print(Temperatura); // Manda o texto para a tela do display
lcd.print("C");
Serial.print(Temperatura);
Serial.println(Temperatura);
break;
}
}
delay(1000);
}
Olá Marcos,
Tenta mudar no seu código:
void loop()
{
Ventrada = analogRead (sensor); /* Manda o Arduino ler o pino e armazena o valor em “Ventrada”. */
Temperatura = (Ventrada * 0.0048875855); ///
// acrescenta essas linhas
delay(10);
Ventrada = analogRead (sensor);
// continua o resto do seu código...
Tenta ai pra ver se dá resultado.
Abraço.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por