From 72dc808eb4df7a1c3952330e09e672a78f91e02a Mon Sep 17 00:00:00 2001 From: ladyada Date: Wed, 27 Aug 2025 08:43:14 -0400 Subject: [PATCH] Apply clang-format styling and add SPI example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Format source code to comply with Adafruit style guidelines - Add SPI interface example sketch 🤖 Generated with Claude Code Co-Authored-By: Claude --- Adafruit_SPA06_003.cpp | 189 +++++++++++++++++++++++---------- Adafruit_SPA06_003.h | 10 +- examples/spi_test/spi_test.ino | 74 +++++++++++++ 3 files changed, 211 insertions(+), 62 deletions(-) create mode 100644 examples/spi_test/spi_test.ino diff --git a/Adafruit_SPA06_003.cpp b/Adafruit_SPA06_003.cpp index 891ba63..bc91e2a 100644 --- a/Adafruit_SPA06_003.cpp +++ b/Adafruit_SPA06_003.cpp @@ -32,7 +32,10 @@ /*! * @brief Instantiates a new SPA06_003 class */ -Adafruit_SPA06_003::Adafruit_SPA06_003() {} +Adafruit_SPA06_003::Adafruit_SPA06_003() { + i2c_dev = NULL; + spi_dev = NULL; +} /*! * @brief Cleans up the SPA06_003 @@ -41,6 +44,9 @@ Adafruit_SPA06_003::~Adafruit_SPA06_003() { if (i2c_dev) { delete i2c_dev; } + if (spi_dev) { + delete spi_dev; + } if (temp_sensor) { delete temp_sensor; } @@ -58,6 +64,10 @@ Adafruit_SPA06_003::~Adafruit_SPA06_003() { * @return True if initialization was successful, otherwise false. */ bool Adafruit_SPA06_003::begin(uint8_t i2c_addr, TwoWire *wire) { + if (spi_dev) { + delete spi_dev; + spi_dev = NULL; + } if (i2c_dev) { delete i2c_dev; } @@ -68,8 +78,71 @@ bool Adafruit_SPA06_003::begin(uint8_t i2c_addr, TwoWire *wire) { return false; } - Adafruit_BusIO_Register chip_id = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_ID, 1); + return _init(); +} + +/*! + * @brief Sets up the hardware and initializes hardware SPI + * @param cspin The pin to use for CS/chip select + * @param theSPI The SPI object to use, defaults to &SPI + * @return True if initialization was successful, otherwise false. + */ +bool Adafruit_SPA06_003::begin(int8_t cspin, SPIClass *theSPI) { + if (i2c_dev) { + delete i2c_dev; + i2c_dev = NULL; + } + if (spi_dev) { + delete spi_dev; + } + + spi_dev = new Adafruit_SPIDevice(cspin, SPA06_003_DEFAULT_SPIFREQ, + SPI_BITORDER_MSBFIRST, SPI_MODE0, theSPI); + + if (!spi_dev->begin()) { + return false; + } + + return _init(); +} + +/*! + * @brief Sets up the hardware and initializes software SPI + * @param cspin The pin to use for CS/chip select + * @param mosipin The pin to use for MOSI/data out + * @param misopin The pin to use for MISO/data in + * @param sckpin The pin to use for SCK/clock + * @return True if initialization was successful, otherwise false. + */ +bool Adafruit_SPA06_003::begin(int8_t cspin, int8_t mosipin, int8_t misopin, + int8_t sckpin) { + if (i2c_dev) { + delete i2c_dev; + i2c_dev = NULL; + } + if (spi_dev) { + delete spi_dev; + } + + spi_dev = new Adafruit_SPIDevice(cspin, sckpin, misopin, mosipin, + SPA06_003_DEFAULT_SPIFREQ, + SPI_BITORDER_MSBFIRST, SPI_MODE0); + + if (!spi_dev->begin()) { + return false; + } + + return _init(); +} + +/*! + * @brief Common initialization code for I2C and SPI interfaces + * @return True if initialization was successful, otherwise false. + */ +bool Adafruit_SPA06_003::_init() { + // Check chip ID using the combined constructor + Adafruit_BusIO_Register chip_id = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_ID, 1); if (chip_id.read() != 0x11) { return false; @@ -116,7 +189,8 @@ bool Adafruit_SPA06_003::begin(uint8_t i2c_addr, TwoWire *wire) { */ uint32_t Adafruit_SPA06_003::getPressureData() { Adafruit_BusIO_Register psr_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_PSR_B2, 3, MSBFIRST); + Adafruit_BusIO_Register(i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, + SPA06_003_REG_PSR_B2, 3, MSBFIRST); uint32_t psr_data = psr_reg.read(); @@ -133,7 +207,8 @@ uint32_t Adafruit_SPA06_003::getPressureData() { */ uint32_t Adafruit_SPA06_003::getTemperatureData() { Adafruit_BusIO_Register tmp_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_TMP_B2, 3, MSBFIRST); + Adafruit_BusIO_Register(i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, + SPA06_003_REG_TMP_B2, 3, MSBFIRST); uint32_t tmp_data = tmp_reg.read(); @@ -149,8 +224,8 @@ uint32_t Adafruit_SPA06_003::getTemperatureData() { * @return Current pressure measurement rate setting */ spa06_003_rate_t Adafruit_SPA06_003::getPressureMeasureRate() { - Adafruit_BusIO_Register prs_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_PRS_CFG, 1); + Adafruit_BusIO_Register prs_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_PRS_CFG, 1); Adafruit_BusIO_RegisterBits pm_rate_bits = Adafruit_BusIO_RegisterBits(&prs_cfg_reg, 4, 4); @@ -163,8 +238,8 @@ spa06_003_rate_t Adafruit_SPA06_003::getPressureMeasureRate() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setPressureMeasureRate(spa06_003_rate_t rate) { - Adafruit_BusIO_Register prs_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_PRS_CFG, 1); + Adafruit_BusIO_Register prs_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_PRS_CFG, 1); Adafruit_BusIO_RegisterBits pm_rate_bits = Adafruit_BusIO_RegisterBits(&prs_cfg_reg, 4, 4); @@ -176,8 +251,8 @@ bool Adafruit_SPA06_003::setPressureMeasureRate(spa06_003_rate_t rate) { * @return Current temperature measurement rate setting */ spa06_003_rate_t Adafruit_SPA06_003::getTemperatureMeasureRate() { - Adafruit_BusIO_Register tmp_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_TMP_CFG, 1); + Adafruit_BusIO_Register tmp_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_TMP_CFG, 1); Adafruit_BusIO_RegisterBits tmp_rate_bits = Adafruit_BusIO_RegisterBits(&tmp_cfg_reg, 4, 4); @@ -190,8 +265,8 @@ spa06_003_rate_t Adafruit_SPA06_003::getTemperatureMeasureRate() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setTemperatureMeasureRate(spa06_003_rate_t rate) { - Adafruit_BusIO_Register tmp_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_TMP_CFG, 1); + Adafruit_BusIO_Register tmp_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_TMP_CFG, 1); Adafruit_BusIO_RegisterBits tmp_rate_bits = Adafruit_BusIO_RegisterBits(&tmp_cfg_reg, 4, 4); @@ -203,8 +278,8 @@ bool Adafruit_SPA06_003::setTemperatureMeasureRate(spa06_003_rate_t rate) { * @return Current pressure oversampling rate setting */ spa06_003_oversample_t Adafruit_SPA06_003::getPressureOversampling() { - Adafruit_BusIO_Register prs_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_PRS_CFG, 1); + Adafruit_BusIO_Register prs_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_PRS_CFG, 1); Adafruit_BusIO_RegisterBits pm_prc_bits = Adafruit_BusIO_RegisterBits(&prs_cfg_reg, 4, 0); @@ -217,8 +292,8 @@ spa06_003_oversample_t Adafruit_SPA06_003::getPressureOversampling() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setPressureOversampling(spa06_003_oversample_t prc) { - Adafruit_BusIO_Register prs_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_PRS_CFG, 1); + Adafruit_BusIO_Register prs_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_PRS_CFG, 1); Adafruit_BusIO_RegisterBits pm_prc_bits = Adafruit_BusIO_RegisterBits(&prs_cfg_reg, 4, 0); @@ -234,8 +309,8 @@ bool Adafruit_SPA06_003::setPressureOversampling(spa06_003_oversample_t prc) { * @return Current temperature oversampling rate setting */ spa06_003_oversample_t Adafruit_SPA06_003::getTemperatureOversampling() { - Adafruit_BusIO_Register tmp_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_TMP_CFG, 1); + Adafruit_BusIO_Register tmp_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_TMP_CFG, 1); Adafruit_BusIO_RegisterBits tmp_prc_bits = Adafruit_BusIO_RegisterBits(&tmp_cfg_reg, 4, 0); @@ -249,8 +324,8 @@ spa06_003_oversample_t Adafruit_SPA06_003::getTemperatureOversampling() { */ bool Adafruit_SPA06_003::setTemperatureOversampling( spa06_003_oversample_t prc) { - Adafruit_BusIO_Register tmp_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_TMP_CFG, 1); + Adafruit_BusIO_Register tmp_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_TMP_CFG, 1); Adafruit_BusIO_RegisterBits tmp_prc_bits = Adafruit_BusIO_RegisterBits(&tmp_cfg_reg, 4, 0); @@ -266,8 +341,8 @@ bool Adafruit_SPA06_003::setTemperatureOversampling( * @return True if coefficients are ready, false otherwise */ bool Adafruit_SPA06_003::isCoeffReady() { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits coef_rdy_bit = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 1, 7); @@ -279,8 +354,8 @@ bool Adafruit_SPA06_003::isCoeffReady() { * @return True if sensor is ready, false otherwise */ bool Adafruit_SPA06_003::isSensorReady() { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits sensor_rdy_bit = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 1, 6); @@ -292,8 +367,8 @@ bool Adafruit_SPA06_003::isSensorReady() { * @return True if temperature data is ready, false otherwise */ bool Adafruit_SPA06_003::isTempDataReady() { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits tmp_rdy_bit = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 1, 5); @@ -305,8 +380,8 @@ bool Adafruit_SPA06_003::isTempDataReady() { * @return True if pressure data is ready, false otherwise */ bool Adafruit_SPA06_003::isPresDataReady() { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits prs_rdy_bit = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 1, 4); @@ -318,8 +393,8 @@ bool Adafruit_SPA06_003::isPresDataReady() { * @return Current measurement mode setting */ spa06_003_meas_mode_t Adafruit_SPA06_003::getMeasurementMode() { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits meas_ctrl_bits = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 3, 0); @@ -332,8 +407,8 @@ spa06_003_meas_mode_t Adafruit_SPA06_003::getMeasurementMode() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setMeasurementMode(spa06_003_meas_mode_t mode) { - Adafruit_BusIO_Register meas_cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_MEAS_CFG, 1); + Adafruit_BusIO_Register meas_cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_MEAS_CFG, 1); Adafruit_BusIO_RegisterBits meas_ctrl_bits = Adafruit_BusIO_RegisterBits(&meas_cfg_reg, 3, 0); @@ -347,8 +422,8 @@ bool Adafruit_SPA06_003::setMeasurementMode(spa06_003_meas_mode_t mode) { */ bool Adafruit_SPA06_003::setInterruptPolarity( spa06_003_int_polarity_t polarity) { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits int_hl_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 7); @@ -364,8 +439,8 @@ bool Adafruit_SPA06_003::setInterruptPolarity( */ bool Adafruit_SPA06_003::setInterruptSource(bool fifo, bool temp_ready, bool pres_ready) { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits int_fifo_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 6); @@ -384,8 +459,8 @@ bool Adafruit_SPA06_003::setInterruptSource(bool fifo, bool temp_ready, * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setTempShift(bool enable) { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits t_shift_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 3); @@ -398,8 +473,8 @@ bool Adafruit_SPA06_003::setTempShift(bool enable) { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::setPresShift(bool enable) { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits p_shift_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 2); @@ -412,8 +487,8 @@ bool Adafruit_SPA06_003::setPresShift(bool enable) { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::enableFIFO(bool enable) { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits fifo_en_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 1); @@ -425,8 +500,8 @@ bool Adafruit_SPA06_003::enableFIFO(bool enable) { * @return True if FIFO is enabled, false otherwise */ bool Adafruit_SPA06_003::isFIFOEnabled() { - Adafruit_BusIO_Register cfg_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_CFG_REG, 1); + Adafruit_BusIO_Register cfg_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_CFG_REG, 1); Adafruit_BusIO_RegisterBits fifo_en_bit = Adafruit_BusIO_RegisterBits(&cfg_reg, 1, 1); @@ -438,8 +513,8 @@ bool Adafruit_SPA06_003::isFIFOEnabled() { * @return True if FIFO is empty, false otherwise */ bool Adafruit_SPA06_003::isFIFOEmpty() { - Adafruit_BusIO_Register fifo_sts_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_FIFO_STS, 1); + Adafruit_BusIO_Register fifo_sts_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_FIFO_STS, 1); Adafruit_BusIO_RegisterBits fifo_empty_bit = Adafruit_BusIO_RegisterBits(&fifo_sts_reg, 1, 0); @@ -451,8 +526,8 @@ bool Adafruit_SPA06_003::isFIFOEmpty() { * @return True if FIFO is full, false otherwise */ bool Adafruit_SPA06_003::isFIFOFull() { - Adafruit_BusIO_Register fifo_sts_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_FIFO_STS, 1); + Adafruit_BusIO_Register fifo_sts_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_FIFO_STS, 1); Adafruit_BusIO_RegisterBits fifo_full_bit = Adafruit_BusIO_RegisterBits(&fifo_sts_reg, 1, 1); @@ -464,8 +539,8 @@ bool Adafruit_SPA06_003::isFIFOFull() { * @return Interrupt status register value with flags */ uint8_t Adafruit_SPA06_003::getStatusFlags() { - Adafruit_BusIO_Register int_sts_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_INT_STS, 1); + Adafruit_BusIO_Register int_sts_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_INT_STS, 1); return int_sts_reg.read() & 0x07; } @@ -475,8 +550,8 @@ uint8_t Adafruit_SPA06_003::getStatusFlags() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::flushFIFO() { - Adafruit_BusIO_Register reset_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_RESET, 1); + Adafruit_BusIO_Register reset_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_RESET, 1); Adafruit_BusIO_RegisterBits fifo_flush_bit = Adafruit_BusIO_RegisterBits(&reset_reg, 1, 7); @@ -488,8 +563,8 @@ bool Adafruit_SPA06_003::flushFIFO() { * @return True if successful, false otherwise */ bool Adafruit_SPA06_003::reset() { - Adafruit_BusIO_Register reset_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_RESET, 1); + Adafruit_BusIO_Register reset_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_RESET, 1); Adafruit_BusIO_RegisterBits soft_rst_bits = Adafruit_BusIO_RegisterBits(&reset_reg, 4, 0); @@ -507,8 +582,8 @@ bool Adafruit_SPA06_003::readCoefficients() { // Read all coefficient data (21 bytes from 0x10 to 0x24) uint8_t coef_data[21]; - Adafruit_BusIO_Register coef_reg = - Adafruit_BusIO_Register(i2c_dev, SPA06_003_REG_COEF, 21); + Adafruit_BusIO_Register coef_reg = Adafruit_BusIO_Register( + i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, SPA06_003_REG_COEF, 21); if (!coef_reg.read(coef_data, 21)) { return false; diff --git a/Adafruit_SPA06_003.h b/Adafruit_SPA06_003.h index ace0634..d7f8409 100644 --- a/Adafruit_SPA06_003.h +++ b/Adafruit_SPA06_003.h @@ -49,7 +49,7 @@ class Adafruit_SPA06_003_Pressure; /** * @brief Default SPI frequency for SPA06_003 */ -#define SPA06_003_DEFAULT_SPIFREQ 1000000 ///< 1 MHz +#define SPA06_003_DEFAULT_SPIFREQ 1000000 ///< 1 MHz /*========================================================================= REGISTERS @@ -174,14 +174,14 @@ class Adafruit_SPA06_003 { public: Adafruit_SPA06_003(); ~Adafruit_SPA06_003(); - + // I2C initialization bool begin(uint8_t i2c_addr = SPA06_003_DEFAULT_ADDR, TwoWire *wire = &Wire); - + // Hardware SPI initialization bool begin(int8_t cspin, SPIClass *theSPI = &SPI); - - // Software SPI initialization + + // Software SPI initialization bool begin(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin); uint32_t getPressureData(); uint32_t getTemperatureData(); diff --git a/examples/spi_test/spi_test.ino b/examples/spi_test/spi_test.ino new file mode 100644 index 0000000..4519c70 --- /dev/null +++ b/examples/spi_test/spi_test.ino @@ -0,0 +1,74 @@ +/*! + * @file spi_test.ino + * + * Demonstrates using the SPA06_003 sensor with SPI interface. + * This example shows both hardware and software SPI configurations. + * + * The begin() function automatically configures the sensor for: + * - Highest precision (128x oversampling) + * - Highest sample rate (200 Hz) + * - Continuous measurement mode + * - Interrupt-based data ready detection + * + * Designed specifically to work with the Adafruit SPA06_003 Breakout + * ----> https://www.adafruit.com/products/xxxx + * + * These sensors support both I2C and SPI interfaces. + * For SPI connections: + * - CS -> pin 10 (or any digital pin) + * - MOSI -> pin 11 + * - MISO -> pin 12 + * - SCK -> pin 13 + * + * Written by Limor 'ladyada' Fried with assistance from Claude Code + * for Adafruit Industries. + * MIT license, check license.txt for more information + * All text above must be included in any redistribution + */ + +#include + +Adafruit_SPA06_003 spa; + +// SPI pin definitions +#define SPA_CS_PIN 10 + +void setup() { + Serial.begin(115200); + while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens + + Serial.println("Adafruit SPA06_003 SPI Test"); + + // Try to initialize the sensor using hardware SPI + // CS pin = 10, default SPI instance + if (!spa.begin(SPA_CS_PIN)) { + Serial.println("Failed to find SPA06_003 chip via hardware SPI"); + Serial.println("Check wiring and try software SPI example"); + while (1) { delay(10); } + } + Serial.println("SPA06_003 Found via Hardware SPI!"); + + Serial.println("Starting continuous measurement..."); + Serial.println("Temperature and pressure readings:"); + Serial.println("Format: Temp (°C) | Pressure (hPa)"); + Serial.println("-----------------------------------"); +} + +void loop() { + // Check if new temperature data is available + if (spa.isTempDataReady()) { + float temperature = spa.readTemperature(); + Serial.print(temperature, 2); + Serial.print(" °C"); + } + + // Check if new pressure data is available + if (spa.isPresDataReady()) { + float pressure = spa.readPressure(); + Serial.print(" | "); + Serial.print(pressure, 2); + Serial.println(" hPa"); + } + + delay(100); // Small delay between checks +} \ No newline at end of file