#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <SPI.h>
// Set up the LCD using I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adjust I2C address to your specific LCD
// Set up DHT22 for temperature and humidity
#define DHTPIN 2 // Pin connected to DHT22 data pin
#define DHTTYPE DHT22 // Define the type of DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// SPI Barometric Pressure Sensor
#define CS_PIN 10 // Chip Select
#define SCK_PIN 13 // SPI Clock
#define SDI_PIN 11 // SPI Data In (MOSI)
#define SDO_PIN 12 // SPI Data Out (MISO)
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Initialize LCD
lcd.begin(16, 2); // Specify the number of columns and rows
lcd.backlight();
// Initialize SPI
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH); // Disable the sensor
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV16); // Adjust as needed for your sensor
// Initialize DHT22 sensor
dht.begin();
// Display startup message
lcd.setCursor(0, 0);
lcd.print("Biodigester");
lcd.setCursor(0, 1);
lcd.print("Monitoring...");
delay(2000);
lcd.clear();
}
void loop() {
// Read temperature and humidity from DHT22
float temperature = dht.readTemperature(); // Read temperature in Celsius
float humidity = dht.readHumidity(); // Read humidity percentage
// Read barometric pressure from SPI sensor
digitalWrite(CS_PIN, LOW); // Enable the sensor
byte pressureData[3];
for (int i = 0; i < 3; i++) {
pressureData[i] = SPI.transfer(0x00); // ermm data
}
digitalWrite(CS_PIN, HIGH); // Disable the sensor
// Convert SPI data to pressure
float pressure = (pressureData[0] << 16 | pressureData[1] << 8 | pressureData[2]) / 100.0;
// Display data on LCD
lcd.setCursor(0, 0);
lcd.print("T1 T:");
lcd.print(temperature);
lcd.print("C H:");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("P:");
lcd.print(pressure);
lcd.print("hPa");
// Output to serial monitor (for debugging)
Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" *C");
Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %");
Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" hPa");
delay(2000); // Wait 2 seconds before updating data again