Bom dia pessoal

estou com o seguinte problema

esou fazendo a leitura de 3 sensores de temperatura ( 1 lm35, 1 ds18b20, 1 dht11 )

ate ai tudo bem ja conseguir exibir na serial e no lcd 1602 tanto a temperatura atual media , minima e maxima de todos 

o que eu querro e que a cada 2 segunda apareça no lcd as leituras dos sensores

ex

leitura do lm35 , depois de 2 segundos

leitura do ds18b20, depois de 2 segundos

leitura do dht11, depois de 2 segundos voltar para o lm35 e assim por diante

conseguir fazer isso usando delay so que dessa forma e ruim pois o arduino ficar parado durante esse tempo sem fazer novas leituras 

o que eu querro e que seja exibido na tela da forma como citei acima so que não bloqueie o processamento do arduino coisa que acontece com o delay

acho que isso deva ser feito com millis ( ou quem sabe timer )

so que não estou conseguindo alguem ai tem algum exemplo de millis de algo parecido exibindo em um lcd varias informações

abs

Exibições: 1323

Responder esta

Respostas a este tópico

Bom dia! Amigo use um contador para isso. Você pode usar ate uma interrupção para fazer o contador incrementar com mais exatidão, mas no final ficaria mais ou menos assim.

 

#include <TimerOne>// Biblioteca da interrupção interna.

int cont = 0;

 

void setup()

{

    Timer1.initialize(1000000); // Tempo para acionar a interrupção em microssegundos.

    Timer1.attachinterrupt(contador);// Função a ser chamada na interrupção.

}

void contador()

{

   cont = cont  ++;

}

void loop()

{

if ( cont <= 2){ lcd.print ( LM35);}// Amigo preste atenção aqui imprima todas as casas do lcd e evite usar o lcd.clear para seu lcd não ficar piscando. recomendo vc colocar um comentario a variavel e completar o restante com espaços vazios.

if( cont >2 && cont <= 4){ lcd.print (DS18S20);}

if(cont > 4 && cont <= 6){lcd.print(DHT11);}

if(cont > 6) {cont = 0;}

}

 

Caso não tenha segue biblioteca TimerOne para Download:

Biblioteca Timer

Link 2

 

Espero ter ajudado.

Att.

Rodrigo Araújo

 

 

vlw mesmo meu amigo

so que estou com esse erro abaixo

class timerOne has no member named attachinterrupt

o que pode ser

Tenta Assim

unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
int cont = 1;

void setup() {

}
void loop()
{
currentMillis = millis();

if(currentMillis - previousMillis >= 2000) {previousMillis = currentMillis; cont++; lcd.clear();}

if(cont > 3){cont = 1;}

switch (cont){
case 1: lcd.print ( LM35);
break;
case 2: lcd.print (DS18S20);
break;
case 3: lcd.print(DHT11);
break;
}

Valeu mesmo amigo funcionou

abs

Amigo desculpe a demora ta ai corrigido.

#include <TimerOne.h>// Biblioteca da interrupção interna.

int cont = 0;

void setup()

{
    Serial.begin(9600);

    Timer1.initialize(1000000); // Tempo para acionar a interrupção em microssegundos.
    Timer1.attachInterrupt(contador);// Função a ser chamada na interrupção.

}

void contador()

{

   cont = cont  ++;

}

void loop()

{

if ( cont <= 2){ Serial.println(" LM35");}

if( cont >2 && cont <= 4){ Serial.println("DS18S20");}

if(cont > 4 && cont <= 6){ Serial.println("DHT11");}

if(cont > 6) {cont = 0;}

}

Att.

Rodrigo Araújo

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço