为与Arduino兼容的PNI RM3100创建驱动程序
我目前正在为RM3100磁强计开发驱动程序,但在读取和写入寄存器时遇到问题。目前,我正在尝试读取状态寄存器,以确定传感器是否正在收集数据;然而,我每次都得到零分。我试图访问注册表的方式是否存在问题?或者我的代码中有错误 C++文件:为与Arduino兼容的PNI RM3100创建驱动程序,arduino,Arduino,我目前正在为RM3100磁强计开发驱动程序,但在读取和写入寄存器时遇到问题。目前,我正在尝试读取状态寄存器,以确定传感器是否正在收集数据;然而,我每次都得到零分。我试图访问注册表的方式是否存在问题?或者我的代码中有错误 C++文件: #include "Arduino.h" #include "QRM3100.h" #include <Wire.h> #include <math.h> #define CALIBRATION_TIMEOUT 5000 //timeout
#include "Arduino.h"
#include "QRM3100.h"
#include <Wire.h>
#include <math.h>
#define CALIBRATION_TIMEOUT 5000 //timeout in milliseconds
#define DEG_PER_RAD (180.0/3.14159265358979)
QRM3100::QRM3100() {
//Just some random initial values
}
void QRM3100::initialize() {
Wire.begin();
}
uint8_t QRM3100::readRegister(uint8_t address){
uint8_t output;
Wire.beginTransmission(QRM3100_I2C_ADDRESS);
Wire.write(address);
Wire.endTransmission();
delayMicroseconds(20);
Wire.requestFrom(QRM3100_I2C_ADDRESS, 1);
while(Wire.available())
{
output = Wire.read();
}
return output;
}
void QRM3100::writeRegister(uint8_t address, uint8_t value){
Wire.beginTransmission(QRM3100_I2C_ADDRESS);
Wire.write(address);
Wire.write(value);
Wire.endTransmission();
}
bool QRM3100::dataReady() {
return ((readRegister(QRM3100_STATUS_REG) & 0x80) >> 7);
}
void QRM3100::start() {
exitStandby();
}
void QRM3100::exitStandby(){
writeRegister(QRM3100_CMM, 0b011100001);
}
Arduino文件:
#include <C:\Users\daehy\OneDrive\Documents\Arduino\libraries\src\QRM3100X.h>
#include <C:\Users\daehy\OneDrive\Documents\Arduino\libraries\src\QRM3100X.cpp>
QRM3100 mag = QRM3100();
void setup() {
Serial.begin(9600);
mag.initialize();
mag.start();
}
void loop() {
Serial.println( mag.dataReady());
}
#包括
#包括
QRM3100 mag=QRM3100();
无效设置(){
Serial.begin(9600);
mag.initialize();
mag.start();
}
void循环(){
Serial.println(mag.dataReady());
}
您似乎没有先设置CMM寄存器。对于连续模式,默认值可能不正确。尝试将CMM寄存器(0x01)设置为以下值:
(当测量到所有坐标轴时,CMM所有坐标轴打开,DRDY开始)
(0x70 | 0x08 | 0x01)
最终的二进制值应该是 |LDM | CMZ | CMY | CMX | DRDM1 | DRDM0 |报警|启动|
|0 | 1 | 1 | 1 | 0 | 0 | 1|
或者十六进制中的0x79如何与标准I2C硬件/库进行实验/比较?(例如RTC)我们实际上使用了MAG3110的驱动程序作为我们在此尝试开发的基础。以下是GitHub的链接:
#include <C:\Users\daehy\OneDrive\Documents\Arduino\libraries\src\QRM3100X.h>
#include <C:\Users\daehy\OneDrive\Documents\Arduino\libraries\src\QRM3100X.cpp>
QRM3100 mag = QRM3100();
void setup() {
Serial.begin(9600);
mag.initialize();
mag.start();
}
void loop() {
Serial.println( mag.dataReady());
}