#include <stdio.h>
#include "pico/stdlib.h"
#include "HX711.h" // Ensure this is included
#include "DHT.h"
#define DHT_PIN 2 // DHT22 data pin
#define TRIG_PIN 3 // HC-SR04 trigger pin
#define ECHO_PIN 4 // HC-SR04 echo pin
DHT dht(DHT_PIN);
HX711 scale(5, 6); // HX711 pins (DT, SCK)
void setup() {
stdio_init_all();
// Initialize DHT22
dht.begin();
// Initialize HX711
scale.begin();
scale.set_scale(); // Set scale factor (adjust if necessary)
scale.tare(); // Tare the scale
// Initialize HC-SR04 pins
gpio_init(TRIG_PIN);
gpio_set_dir(TRIG_PIN, GPIO_OUT);
gpio_init(ECHO_PIN);
gpio_set_dir(ECHO_PIN, GPIO_IN);
}
float readDistance() {
// Trigger HC-SR04
gpio_put(TRIG_PIN, true);
sleep_us(10);
gpio_put(TRIG_PIN, false);
// Measure echo duration
while (gpio_get(ECHO_PIN) == 0);
uint32_t start = time_us_32();
while (gpio_get(ECHO_PIN) == 1);
uint32_t duration = time_us_32() - start;
// Calculate distance in cm
float distance = (duration * 0.0343) / 2;
return distance;
}
void loop() {
// Read temperature and humidity
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
printf("Failed to read from DHT sensor!\n");
} else {
printf("Temperature: %.2f °C, Humidity: %.2f %%\n", t, h);
}
// Read weight from HX711
float weight = scale.get_units(10); // Average of 10 readings
printf("Weight: %.2f g\n", weight);
// Read distance from HC-SR04
float distance = readDistance();
printf("Distance: %.2f cm\n", distance);
sleep_ms(2000); // Wait for 2 seconds before next reading
}
int main() {
setup();
while (true) {
loop();
}
return 0;
}