Essa é minha primeira participação no forum ARDUINO e minha duvida é seguinte teno um arduino Duemilanove e estou ligando dois sensores nele um LM35DZ no pino 0(analogico) e o LDR no pino 5, já no codigo eu faço a leitura dos pino e imprimo no monitor, o que acontece quendo faço esse monitoramento individual os valores sai corretos ex.: a temperatura do LM35dz já e também do LDR sai certinho porem quando tento monitorar os dois ao mesmo tempo o LDR está alternado o valor do LM35dz, oque pode está ocorrendo está no codigo ou no hardware já que ambos usam a mesma fonte +(5v) e - (gnd) do arduino, porem já tornei essa fonte externa e com o pino gnd interligado no arduino e o mesmo ocorreu, algum aqui já passou por isso monitorar dois sensores analogicos com arduino e o valor sair alterado???
int potPin = 0; //input read pin for LM35 is Analog Pin 0
float temperature = 0; //variable which will be calculated in process
long val=0; //variable to store the value coming from the sensor
//-------------- LDR
long valor = 0; // Variavel onde e guardado o valor lido do LDR
int analogin = 5; // Pino onde vamos ligar a LDR
//---------------FIM
void setup()
{
Serial.begin(9600);
}
void loop () //loop below process
{
//-------------LDR
valor = analogRead(analogin); // O valor que irá ser lido na porta analogica numero 6 irá ser guardado na variavel “valor”
Serial.println("Valor LDR");
Serial.println(valor); // Mostras no Serial Monitor o valor da variavel “valor”
//--------------FIM
val = analogRead(potPin); //read the value of sensor
temperature = (5val100/1024); //convert voltage to temperature
Serial.println("Valor LM35dz");
Serial.println ((long)temperature); //print temperature value on serial screen
Amigo adicione um Serial.print, para verificar o valor lido do LM35
val = analogRead(potPin); //read the value of sensor
Serial.print("LM35: ");
Serial.println(val); // ## imprima o valor lido aqui e verifique se esta de acordo com o esperado
temperature = (5*val*100/1024); //convert voltage to temperature
Serial.println("Valor LM35dz");
Serial.println ((long)temperature); //print temperature value on serial screen
delay(10000); //Tempo de espera em secondos
Se o valor lido estiver ok, e o valor depois de feito o calculo estiver incorreto, você está com problema de tamanho de variavel. Se ambos os valores estiverem incorretos, o problema está nas ligações (ligação incorreta, mal contato, porta com defeito, etc).
Para o primeiro caso, tenta declarar temperatura como unsigned long, e ajustar o calculo para trabalhar com numero inteiro. calculos com pontos flutuantes geralmente sao problematicos para microcontroladores.
pq você esta imprimindo a temperatura que é um float como um long?
#define analogin 5 // Pino onde vamos ligar a LDR para economizar memória pode definir com o define
#define potPin 0
float temperature = 0;
int val=0;
//-------------- LDR
int valor = 0; // não precisa ser um long
//---------------FIM
void setup()
{
Serial.begin(9600);
}
void loop () //loop below process
{
//-------------LDR
valor = analogRead(analogin); // recebe valor da porta analógica
Serial.println("Valor LDR");
Serial.println(valor); // mostar o valor decimal para o voltagem , 0 a 1024
//--------------FIM
temperature = (5*val*100/1024); //convert voltage to temperature
Serial.println("Valor LM35dz");
Serial.println (temperature); //print temperature value on serial screen
delay(10000); //Tempo de espera em millisegundos
}