01_pressure.ino 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. debugln("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. // dps_temp->printSensorDetails();
  19. // dps_pressure->printSensorDetails();
  20. debugln("Initialized pressure sensor");
  21. }
  22. void updatePressure() {
  23. sensors_event_t temp,
  24. pressure;
  25. debugln("Reading pressure & temperature");
  26. // Wait until both are available, as reading temperature
  27. // resets pressure availability, but both are still OK
  28. // to read.
  29. while (!dps.temperatureAvailable() || !dps.pressureAvailable()) {
  30. debugln("Waiting...");
  31. delay(1);
  32. }
  33. // Docs say I need to read temperature first,
  34. // though testing seems to show it doesn't matter.
  35. dps_temp->getEvent(&temp);
  36. PressTemp.temperature = temp.temperature;
  37. dps_pressure->getEvent(&pressure);
  38. PressTemp.pressure = pressure.pressure;
  39. debugln("Got temperature & pressure");
  40. }