Hola buenas,
Estoy intentando hacer una estacion meteorologica, que lea los datos de los sensores cada 5 minutos y subirlos a un servidor con una base de datos.
De momento esto haciendo la parte de la lectura de los sensores cada 5 minutos. Mi idea, es que en una pantalla lcd se vayan mostrando los datos actuales de los sensores y el dia y la hora. La idea es mostrar los datos de un sensor en la pantalla durante 5 segundos. Al cabo de 5 segundos mostrar los datos de otro sensor y asi con todos los sensores, de manera que los datos de cada sensor estaran en pantalla solo 5 segundos. Esta parte del cambio de pantalla cada 5 segundos no consigo que me salga sin utilizar la funcion delay(). Cualquier ayuda será buena.
Gracias de antemano.
//ESTACIO METEOROLOGICA
//LLIBRERIES
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <BH1750.h>
#include <Adafruit_BME280.h>
#include <RTClib.h>
#include <Wire.h>
#include <HTU21D.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>
unsigned long tActual = 0;
unsigned long tUCambio = 0;
unsigned long interval = 5000;
//HTU21D --- a 3V connectat per I2C
HTU21D htu;
float T;
float H;
float CH;
//DHT22 --- a 5V i connectat al pin 7
#define DHTTYPE DHT22
#define DHTPIN 8
DHT dht (DHTPIN, DHTTYPE);
float t;
float h;
float sensTerm;
//SENSOR BMP280 --- a 3v i connectat per I2C
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
float temp;
float pressio;
float alt;
float hum;
//RELLOTGE RTC --- a 5V i conectat per I2C
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//PANTALLA LCD 20X04 ---- 5V i conectat per I2C
LiquidCrystal_I2C lcd(0x3f, 20, 4);
void setup() {
Serial.begin(9600);
rtc.begin();
lcd.init();
lcd.clear();
lcd.backlight();
htu.begin();
dht.begin();
bme.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
DateTime now = rtc.now();
Alarm.alarmRepeat(18, 45, 0, lecturaSensors);
Alarm.timerRepeat(300000, lecturaSensors);
}
void loop() {
tActual = millis();
if (tActual - tUCambio >= interval) {
pantPrinc;
tUCambio = tActual;
}
if (tActual - tUCambio >= interval) {
tUCambio = tActual;
pant1;
}
if (tActual - tUCambio >= interval) {
tUCambio = tActual;
pant2;
}
if (tActual - tUCambio >= interval) {
tUCambio = tActual;
pant3;
}
if (tActual - tUCambio >= interval) {
tUCambio = tActual;
pant4;
}
}
void pantPrinc ()
{
DateTime now = rtc.now();
//Pantalla principal
lcd.clear();
lcd.setCursor(5, 0);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.println(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.setCursor(0, 1);
lcd.print(now.day(), DEC);
Serial.print(now.day(), DEC);
lcd.print('/');
Serial.print('/');
lcd.print(now.month(), DEC);
Serial.print(now.month(), DEC);
lcd.print('/');
Serial.print('/');
lcd.print(now.year(), DEC);
Serial.println(now.year(), DEC);
lcd.setCursor(0, 2);
lcd.print(now.hour(), DEC);
Serial.print(now.hour(), DEC);
lcd.print(':');
Serial.print(':');
lcd.print(now.minute(), DEC);
Serial.print(now.minute(), DEC);
lcd.print(':');
Serial.print(':');
lcd.print(now.second(), DEC);
Serial.println(now.second(), DEC);
Serial.println("----------------------");
}
void pant1() {
//Pantalla 1
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pantalla principal");
Serial.println("Pantalla principal");
lcd.setCursor(0, 1);
lcd.print("Temperatura:");
Serial.print("Temperatura:");
lcd.print(T);
Serial.print(T);
lcd.print("*C");
Serial.println("ºC");
lcd.setCursor(0, 2);
lcd.print("Humitat:");
Serial.print("Humitat");
lcd.print(CH);
Serial.print(CH);
Serial.println("%");
lcd.setCursor(0, 3);
lcd.print("SensacioTermica:");
Serial.print("Sensació Tèrmica:");
lcd.print(sensTerm);
Serial.print(sensTerm);
lcd.print("ºC");
Serial.println("ºC");
Serial.println("----------------------");
}
void pant2() {
//Pantalla 2
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("HTU21D");
Serial.println("HTU21D");
lcd.setCursor(0, 1);
lcd.print("Temperatura:");
Serial.print("Temperatura:");
lcd.print(T);
Serial.print(T);
lcd.println("*C");
Serial.println("ºC");
lcd.setCursor(0, 2);
lcd.print("Humitat:");
Serial.print("Humitat:");
lcd.print(H);
Serial.print(H);
Serial.println("%");
lcd.setCursor(0, 3);
lcd.print("Humitat compensada:");
Serial.print("Humitat Compensada:");
lcd.print(CH);
Serial.print(CH);
Serial.println("%");
Serial.println("----------------------");
}
void pant3() {
//Pantalla 3
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("dht22");
Serial.println("DHT");
lcd.setCursor(0, 1);
lcd.print("Temperatura:");
Serial.print("Temperatura:");
lcd.print(t);
Serial.print(t);
lcd.print("*C");
Serial.println("ºC");
lcd.setCursor(0, 2);
lcd.print("Humitat:");
Serial.print("Humitat:");
lcd.print(h);
Serial.print(h);
Serial.println("%");
lcd.setCursor(0, 3);
lcd.print("SensacioTermica:");
Serial.print("Sensació Tèrmica:");
lcd.print(sensTerm);
Serial.print(sensTerm);
lcd.print("ºC");
Serial.println("ºC");
Serial.println("----------------------");
}
void pant4() {
//Pantalla 4
lcd.clear();
lcd.setCursor(0, 0);
lcd.print ("Barometre");
Serial.println("Barometre");
lcd.setCursor(0, 1);
lcd.print("La pressió es:");
Serial.print("a pressió es:");
lcd.print(pressio);
Serial.print(pressio);
lcd.print("hPa");
Serial.println("hPa");
lcd.setCursor(0, 2);
lcd.print("Altura:");
Serial.print("Altura:");
lcd.print(alt);
Serial.print(alt);
lcd.print("m");
Serial.println("m");
Serial.print("Temperatura:");
Serial.print(temp);
Serial.print("Humitat:");
Serial.println("ºC");
Serial.print(hum);
Serial.println("%");
Serial.println("----------------------");
}
float lecturaSensors() {
float T = htu.readTemperature();
float H = htu.readHumidity();
float CH = htu.readCompensatedHumidity();
float t = dht.readTemperature();
float h = dht.readHumidity();
float sensTerm = dht.computeHeatIndex(t, h, false);
float temp = bme.readTemperature();
float pressio = bme.readPressure() / 100.0F;
float alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
float hum = bme.readHumidity();
}