Apply clang-format styling and add SPI example

- Format source code to comply with Adafruit style guidelines
- Add SPI interface example sketch

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ladyada 2025-08-27 08:43:14 -04:00
parent 16cd13858f
commit 72dc808eb4
3 changed files with 211 additions and 62 deletions

View file

@ -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;

View file

@ -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();

View file

@ -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.h>
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
}