#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#include <Wire.h>
//#include <LiquidCrystal_I2C.h>***********
#include <LiquidCrystal.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
// Pin for DHT22 sensor
#define DHTPIN 7
#define DHTTYPE DHT22
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
//Adafruit_BMP280 bmp ;
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
// Initialize LCD
//LiquidCrystal_I2C lcd(0x27, 16, 2); // Change the address if needed
//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 6;
bool lastButtonState = false;
bool buttonState = false;
unsigned long debounceDuration = 50; // millis
unsigned long lastDebounceTime = 0;
int count =0 ;
void setup() {
// Initialize serial communication
Serial.begin(9600);
dht.begin();
if (!bmp.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
// Initialize DHT sensor
lcd.begin(16,2);
//pinMode ( buttonPin , INPUT ) ;
pinMode(buttonPin, INPUT_PULLUP);
lcd . print (" Smart Weather ") ;
lcd . setCursor (0, 1) ;
lcd . print (" Station ") ;
delay (2000) ;
lcd . clear () ;
lcd . print (" Initializing ...") ;
delay (1000) ;
lcd . clear () ;
lcd . print (" Press button to") ;
lcd . setCursor (0, 1) ;
lcd . print (" cycle data ") ;
// Initialize LCD
//lcd.init();****************
//lcd.backlight();************
// Print initial message on LCD
// lcd.setCursor(0, 0);
// lcd.print("Temperature:");
// lcd.setCursor(0, 1);
// lcd.print("Humidity:");
}
void loop() {
/* if (millis() - lastTimeButtonStateChanged > debounceDuration) {
byte buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
lastTimeButtonStateChanged = millis();
lastButtonState = buttonState;
if (buttonState == LOW) {
// do an action, for example print on Serial
display();
}
}
}
*/
int reading = digitalRead (buttonPin) ;
if ( reading != lastButtonState ) {
lastDebounceTime = millis () ;
}
if (( millis () - lastDebounceTime ) > debounceDuration ) {
if ( reading != buttonState ) {
buttonState = reading ;
if ( buttonState == LOW ) {
count = count + 1 ;
display() ;
}
}
}
lastButtonState = reading ;
}
void display(){
// Read temperature and humidity data from DHT sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read temperature and humidity data from bmp sensor
float temperature1 = bmp.readTemperature();
float Pressure = bmp.readPressure() / 100.0F;
if (count == 1 ){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
// Display temperature on serial monitor
Serial.print("Temperature: ");
Serial.print(temperature);
lcd.setCursor(12, 0);
lcd.print(temperature);
// Wait for 1 second
delay(1000);
}
if(count == 2){
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Humidity:");
// Display Humidity on serial monitor
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Display Humidity on LCD
lcd.setCursor(12, 1);
lcd.print(humidity);
// Wait for 1 second
delay(1000);
}
if(count == 3){
//lcd.clear();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
Serial.print("Temperature = ");
Serial.print(temperature1);
Serial.println(" *C");
lcd.setCursor(12, 0);
lcd.print(temperature1);
// Wait for 1 second
delay(1000);
}
if(count == 4){
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Pressure:");
Serial.print("Pressure = ");
Serial.print(Pressure);
Serial.println(" hPa");
lcd.setCursor(12, 1);
lcd.print(Pressure);
// Wait for 1 second
delay(1000);
count = 0;
}
}