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
Tags:
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:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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