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)

=\

Exibições: 1311

Responder esta

Respostas a este tópico

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.

Não deu certo =\

Obrigado !

Conseguiu resolver?

Consegui resolver a 3 anos atrás tudo lindo... agora não me pergunte o que fiz que não me lembro e não tenho nem o steck.

Abraço !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço