Initial commit: Add basic QMC5883P library
- Add core library files (Adafruit_QMC5883P.h/.cpp) - Add basic example sketch with chip detection - Add standard Adafruit project files (.clang-format, README.md, GitHub workflows) - Library successfully tests I2C communication and chip ID verification 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
commit
d0a569be1e
10 changed files with 269 additions and 0 deletions
13
.clang-format
Normal file
13
.clang-format
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
Language: Cpp
|
||||||
|
BasedOnStyle: Google
|
||||||
|
IndentWidth: 2
|
||||||
|
ColumnLimit: 80
|
||||||
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
PointerAlignment: Left
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
32
.github/workflows/githubci.yml
vendored
Normal file
32
.github/workflows/githubci.yml
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
name: Arduino Library CI
|
||||||
|
|
||||||
|
on: [pull_request, push, repository_dispatch]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/setup-python@v1
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: adafruit/ci-arduino
|
||||||
|
path: ci
|
||||||
|
|
||||||
|
- name: pre-install
|
||||||
|
run: bash ci/actions_install.sh
|
||||||
|
|
||||||
|
- name: clang
|
||||||
|
run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
|
||||||
|
|
||||||
|
- name: test platforms
|
||||||
|
run: python3 ci/build_platform.py main_platforms
|
||||||
|
|
||||||
|
- name: doxygen
|
||||||
|
env:
|
||||||
|
GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
|
||||||
|
PRETTYNAME : "Adafruit QMC5883P Arduino Library"
|
||||||
|
run: bash ci/doxy_gen_and_deploy.sh
|
||||||
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Datasheets
|
||||||
|
*.pdf
|
||||||
|
*.txt
|
||||||
|
|
||||||
|
# OS generated files
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# IDE files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
build/
|
||||||
|
bin/
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
70
Adafruit_QMC5883P.cpp
Normal file
70
Adafruit_QMC5883P.cpp
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*!
|
||||||
|
* @file Adafruit_QMC5883P.cpp
|
||||||
|
*
|
||||||
|
* @mainpage Adafruit QMC5883P 3-axis magnetometer library
|
||||||
|
*
|
||||||
|
* @section intro_sec Introduction
|
||||||
|
*
|
||||||
|
* This is a library for the QMC5883P 3-axis magnetometer
|
||||||
|
*
|
||||||
|
* These sensors use I2C to communicate, 2 pins (SCL+SDA) are required
|
||||||
|
* to interface with the breakout.
|
||||||
|
*
|
||||||
|
* Adafruit invests time and resources providing this open source code,
|
||||||
|
* please support Adafruit and open-source hardware by purchasing
|
||||||
|
* products from Adafruit!
|
||||||
|
*
|
||||||
|
* @section author Author
|
||||||
|
*
|
||||||
|
* Written by ladyada for Adafruit Industries.
|
||||||
|
*
|
||||||
|
* @section license License
|
||||||
|
*
|
||||||
|
* MIT license, all text here must be included in any redistribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Adafruit_QMC5883P.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Instantiates a new QMC5883P class
|
||||||
|
*/
|
||||||
|
Adafruit_QMC5883P::Adafruit_QMC5883P(void) { i2c_dev = NULL; }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Cleans up the QMC5883P
|
||||||
|
*/
|
||||||
|
Adafruit_QMC5883P::~Adafruit_QMC5883P(void) {
|
||||||
|
if (i2c_dev) {
|
||||||
|
delete i2c_dev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Sets up the hardware and initializes I2C
|
||||||
|
* @param i2c_addr
|
||||||
|
* The I2C address to be used.
|
||||||
|
* @param wire
|
||||||
|
* The Wire object to be used for I2C connections.
|
||||||
|
* @return True if initialization was successful, otherwise false.
|
||||||
|
*/
|
||||||
|
bool Adafruit_QMC5883P::begin(uint8_t i2c_addr, TwoWire *wire) {
|
||||||
|
if (i2c_dev) {
|
||||||
|
delete i2c_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_dev = new Adafruit_I2CDevice(i2c_addr, wire);
|
||||||
|
|
||||||
|
if (!i2c_dev->begin()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check chip ID
|
||||||
|
Adafruit_BusIO_Register chip_id_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CHIPID);
|
||||||
|
uint8_t chip_id = chip_id_reg.read();
|
||||||
|
if (chip_id != 0x80) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
61
Adafruit_QMC5883P.h
Normal file
61
Adafruit_QMC5883P.h
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*!
|
||||||
|
* @file Adafruit_QMC5883P.h
|
||||||
|
*
|
||||||
|
* This is a library for the QMC5883P 3-axis magnetometer
|
||||||
|
*
|
||||||
|
* These sensors use I2C to communicate, 2 pins (SCL+SDA) are required
|
||||||
|
* to interface with the breakout.
|
||||||
|
*
|
||||||
|
* Adafruit invests time and resources providing this open source code,
|
||||||
|
* please support Adafruit and open-source hardware by purchasing
|
||||||
|
* products from Adafruit!
|
||||||
|
*
|
||||||
|
* Written by ladyada for Adafruit Industries.
|
||||||
|
*
|
||||||
|
* MIT license, all text here must be included in any redistribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ADAFRUIT_QMC5883P_H_
|
||||||
|
#define _ADAFRUIT_QMC5883P_H_
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include <Adafruit_BusIO_Register.h>
|
||||||
|
#include <Adafruit_I2CDevice.h>
|
||||||
|
|
||||||
|
/*=========================================================================
|
||||||
|
I2C ADDRESS/BITS
|
||||||
|
-----------------------------------------------------------------------*/
|
||||||
|
#define QMC5883P_DEFAULT_ADDR 0x2C ///< Default I2C address
|
||||||
|
/*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================
|
||||||
|
REGISTERS
|
||||||
|
-----------------------------------------------------------------------*/
|
||||||
|
#define QMC5883P_REG_CHIPID 0x00 ///< Chip ID register
|
||||||
|
#define QMC5883P_REG_XOUT_LSB 0x01 ///< X-axis output LSB register
|
||||||
|
#define QMC5883P_REG_XOUT_MSB 0x02 ///< X-axis output MSB register
|
||||||
|
#define QMC5883P_REG_YOUT_LSB 0x03 ///< Y-axis output LSB register
|
||||||
|
#define QMC5883P_REG_YOUT_MSB 0x04 ///< Y-axis output MSB register
|
||||||
|
#define QMC5883P_REG_ZOUT_LSB 0x05 ///< Z-axis output LSB register
|
||||||
|
#define QMC5883P_REG_ZOUT_MSB 0x06 ///< Z-axis output MSB register
|
||||||
|
#define QMC5883P_REG_STATUS 0x09 ///< Status register
|
||||||
|
#define QMC5883P_REG_CONTROL1 0x0A ///< Control register 1
|
||||||
|
#define QMC5883P_REG_CONTROL2 0x0B ///< Control register 2
|
||||||
|
/*=========================================================================*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Class for hardware interfacing with the QMC5883P 3-axis magnetometer
|
||||||
|
*/
|
||||||
|
class Adafruit_QMC5883P {
|
||||||
|
public:
|
||||||
|
Adafruit_QMC5883P(void);
|
||||||
|
~Adafruit_QMC5883P(void);
|
||||||
|
|
||||||
|
bool begin(uint8_t i2c_addr = QMC5883P_DEFAULT_ADDR, TwoWire *wire = &Wire);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Adafruit_I2CDevice *i2c_dev; ///< Pointer to I2C bus interface
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
0
QMC5883P.pdf:Zone.Identifier
Normal file
0
QMC5883P.pdf:Zone.Identifier
Normal file
34
README.md
Normal file
34
README.md
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Adafruit QMC5883P Library [](https://github.com/adafruit/Adafruit_QMC5883P/actions)
|
||||||
|
|
||||||
|
<a href="https://www.adafruit.com/products/"><img src="assets/board.jpg?raw=true" width="500px"><br/></a>
|
||||||
|
|
||||||
|
This is a library for the QMC5883P 3-axis magnetometer
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- 3-axis magnetic field sensing
|
||||||
|
- 16-bit resolution
|
||||||
|
- I2C interface
|
||||||
|
- Multiple full-scale ranges (±2G, ±8G, ±12G, ±30G)
|
||||||
|
- Built-in self-test capability
|
||||||
|
- Temperature compensation
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To install, use the Arduino Library Manager and search for "Adafruit QMC5883P" and install the library.
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
This library depends on the [Adafruit BusIO library](https://github.com/adafruit/Adafruit_BusIO)
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
|
||||||
|
The QMC5883P is a 3-axis magnetometer with I2C interface. It requires a 3.3V or 5V power supply.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions are welcome! Please read our [Code of Conduct](https://github.com/adafruit/Adafruit_QMC5883P/blob/master/CODE_OF_CONDUCT.md) before contributing to help this project stay welcoming.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT license, all text above must be included in any redistribution. See license.txt for more information.
|
||||||
27
examples/test_QMC5883P/test_QMC5883P.ino
Normal file
27
examples/test_QMC5883P/test_QMC5883P.ino
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* QMC5883P Test Sketch
|
||||||
|
*
|
||||||
|
* Basic test for the QMC5883P 3-axis magnetometer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Adafruit_QMC5883P.h>
|
||||||
|
|
||||||
|
Adafruit_QMC5883P qmc;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
while (!Serial) delay(10);
|
||||||
|
|
||||||
|
Serial.println("QMC5883P Test");
|
||||||
|
|
||||||
|
if (!qmc.begin()) {
|
||||||
|
Serial.println("Failed to find QMC5883P chip");
|
||||||
|
while (1) delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("QMC5883P Found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
6
package-lock.json
generated
Normal file
6
package-lock.json
generated
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"name": "Adafruit_QMC5883P",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {}
|
||||||
|
}
|
||||||
1
package.json
Normal file
1
package.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
Loading…
Reference in a new issue