为与Arduino兼容的PNI RM3100创建驱动程序

为与Arduino兼容的PNI RM3100创建驱动程序,arduino,Arduino,我目前正在为RM3100磁强计开发驱动程序,但在读取和写入寄存器时遇到问题。目前,我正在尝试读取状态寄存器,以确定传感器是否正在收集数据;然而,我每次都得到零分。我试图访问注册表的方式是否存在问题?或者我的代码中有错误 C++文件: #include "Arduino.h" #include "QRM3100.h" #include <Wire.h> #include <math.h> #define CALIBRATION_TIMEOUT 5000 //timeout

我目前正在为RM3100磁强计开发驱动程序,但在读取和写入寄存器时遇到问题。目前,我正在尝试读取状态寄存器,以确定传感器是否正在收集数据;然而,我每次都得到零分。我试图访问注册表的方式是否存在问题?或者我的代码中有错误

C++文件:

#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());
}