با سلام و احترام
بنده براي راه اندازي سنسور mpu9250 نياز دارم كه فقط شتاب سنجش رو فعال كنم و داده ها رو بر حسب متربر مجذور ثانيه ثبت كنم البته به گونه اي كه بتونم دامنه شتاب رو اگر نياز شد تغيير دهم. بنده از كد زير استفاده كردم نمي دونم درست هست يا خير؟ خروجي داده ها رو نميدونم برحسب چي هست.
ممنون ميشم راهنمايي كنيد.
#include <Wire.h> #include <TimerOne.h>#define MPU9250_ADDRESS 0x68
#define MAG_ADDRESS 0x0C#define ACC_FULL_SCALE_2_G 0x00
#define ACC_FULL_SCALE_4_G 0x08
#define ACC_FULL_SCALE_8_G 0x10
#define ACC_FULL_SCALE_16_G 0x18void I2Cread(uint8_t Address, uint8_t Register, uint8_t Nbytes, uint8_t* Data)
{
// Set register address
Wire.beginTransmission(Address);
Wire.write(Register);
Wire.endTransmission();// Read Nbytes
Wire.requestFrom(Address, Nbytes);
uint8_t index=0;
while (Wire.available())
Data[index++]=Wire.read();
}
void I2CwriteByte(uint8_t Address, uint8_t Register, uint8_t Data)
{
Wire.beginTransmission(Address);
Wire.write(Register);
Wire.write(Data);
Wire.endTransmission();
}
long int ti;
volatile bool intFlag=false;
void setup()
{
Wire.begin();
Serial.begin(115200);
I2CwriteByte(MPU9250_ADDRESS,29,0x06);
I2CwriteByte(MPU9250_ADDRESS,26,0x06);I2CwriteByte(MPU9250_ADDRESS,28,ACC_FULL_SCALE_16_G);pinMode(13, OUTPUT);
Timer1.initialize(10000); // initialize timer1, and set a 1/2 second period
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
}
long int cpt=0;
void callback()
{
intFlag=true;
digitalWrite(13, digitalRead(13) ^ 1);
}
void loop()
{
while (!intFlag);
intFlag=false;
uint8_t Buf[14];
I2Cread(MPU9250_ADDRESS,0x3B,14,Buf);int16_t ax=-(Buf[0]<<8 | Buf[1]);
int16_t ay=-(Buf[2]<<8 | Buf[3]);
int16_t az=Buf[4]<<8 | Buf[5];
Serial.print (ax);
Serial.print ( " \t");
Serial.print (ay);
Serial.print ( " \t");
Serial.println (az);
Serial.print (“\t”);
delay(20);
}