#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
#define DHTPIN 7 // DHT22 data pin
#define DHTTYPE DHT22 // DHT22 type
#define BUTTON_PIN 6 // Push button pin
DHT dht (DHTPIN , DHTTYPE );
Adafruit_BMP280 bmp;
int RS = 12, E = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(RS, E, d4, d5, d6, d7);
const int buttonPin = 6;
int buttonState = 0;
int lastButtonState = 0;
int screen = -1;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.begin(16, 2); // Initialisation de l'écran LCD
dht.begin();
bmp.begin();
Serial.begin(9600);
lcd.print("Weather Station");
delay(2000);
lcd.clear();
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH && lastButtonState == LOW) {
screen = (screen + 1) % 3;
updateScreen(screen);
}
lastButtonState = buttonState;
float temp = dht.readTemperature();
float humi = dht.readHumidity();
if (isnan(humi) || isnan(temp)) {
lcd.setCursor(0, 0);
lcd.print("Failed to read DHT");
}
delay(100);
}
void updateScreen(int screen) {
lcd.clear();
lcd.setCursor(15, 1);
lcd.print(String(screen + 1));
lcd.setCursor(2, 0);
if (screen == 0) {
float temp = dht.readTemperature();
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
} else if (screen == 1) {
float humi = dht.readHumidity();
lcd.print("Hum: ");
lcd.print(humi);
lcd.print(" %");
} else if (screen == 2) {
float pressure = bmp.readPressure() / 100.0;
lcd.setCursor(2, 0);
lcd.print("Pressure: ");
lcd.setCursor(3, 1);
lcd.print(pressure);
lcd.print(" hPa");
}
}