01_pressure.ino 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <Adafruit_DPS310.h>
  2. Adafruit_DPS310 dps;
  3. Adafruit_Sensor *dps_temp = dps.getTemperatureSensor();
  4. Adafruit_Sensor *dps_pressure = dps.getPressureSensor();
  5. struct {
  6. float pressure;
  7. float temperature;
  8. } PressTemp;
  9. void initPressure() {
  10. debug("Initializing pressure sensor");
  11. if (!dps.begin_I2C()) {
  12. Serial.println("Failed to initialize pressure sensor!");
  13. ERR;
  14. }
  15. // Set high precision
  16. dps.configurePressure(DPS310_64HZ, DPS310_64SAMPLES);
  17. dps.configureTemperature(DPS310_64HZ, DPS310_64SAMPLES);
  18. debug("Initialized pressure sensor");
  19. }
  20. void updatePressure() {
  21. sensors_event_t temp,
  22. pressure;
  23. debug("Reading pressure & temperature");
  24. // Wait until both are available, as reading temperature
  25. // resets pressure availability, but both are still OK
  26. // to read.
  27. while (!dps.temperatureAvailable() || !dps.pressureAvailable()) {
  28. debug("Waiting...");
  29. delay(1);
  30. }
  31. // Docs say I need to read temperature first,
  32. // though testing seems to show it doesn't matter.
  33. dps_temp->getEvent(&temp);
  34. PressTemp.temperature = temp.temperature;
  35. dps_pressure->getEvent(&pressure);
  36. PressTemp.pressure = pressure.pressure;
  37. debug("Got temperature & pressure");
  38. }