#include <Arduino.h>
#include <DHT.h>
#define DHT_PIN 15
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
float temperature = 0;
float humidity = 0;
float heatIndex = 0;
unsigned long previousReadTime = 0;
const unsigned long READ_INTERVAL = 2000;
unsigned long displayUpdateTime = 0;
const unsigned long DISPLAY_INTERVAL = 5000;
void setup() {
Serial1.begin(115200);
dht.begin();
Serial1.println("Raspberry Pi Pico Weather Station");
Serial1.println("Sensor: DHT22");
Serial1.println("Update interval: 5 seconds");
Serial1.println("Waiting for sensor to stabilize...");
delay(2000);
Serial1.println("Weather Station Ready!");
}
void readSensorData() {
float newTemp = dht.readTemperature();
float newHumidity = dht.readHumidity();
if (isnan(newTemp) || isnan(newHumidity)) {
Serial1.println("Error reading from DHT sensor!");
return;
}
temperature = newTemp;
humidity = newHumidity;
heatIndex = dht.computeHeatIndex(temperature, humidity, false);
}
void displayWeatherData() {
Serial1.println("\n");
Serial1.println(" WEATHER STATION ");
if (temperature >= 30.0) {
Serial1.print("Hot");
} else if (temperature >= 25.0) {
Serial1.print("Warm");
} else if (temperature >= 20.0) {
Serial1.print("Comfortable");
} else if (temperature >= 15.0) {
Serial1.print("Cool");
} else {
Serial1.print("Cold");
}
Serial1.println("\n");
Serial1.print(millis() / 1000);
}
void displayCompactData() {
Serial1.print("[");
Serial1.print(millis() / 1000);
Serial1.print("s] Temp: ");
Serial1.print(temperature, 1);
Serial1.print("°C, Hum: ");
Serial1.print(humidity, 1);
Serial1.print("%, Feels: ");
Serial1.print(heatIndex, 1);
Serial1.println("°C");
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - previousReadTime >= READ_INTERVAL) {
readSensorData();
previousReadTime = currentTime;
displayCompactData();
}
if (currentTime - displayUpdateTime >= DISPLAY_INTERVAL) {
displayWeatherData();
displayUpdateTime = currentTime;
}
delay(100);
}