#include <SPI.h>
#define BMI323_CS 10 // Chip Select Pin
#define ACC_CONF 0x20 // Accelerometer configuration register
#define GYR_CONF 0x21 // Gyroscope configuration register
#define CMD 0x7E // Command register
#define CHIP_ID 0x00 // Chip ID register
void setup() {
Serial.begin(115200);
SPI.begin();
pinMode(BMI323_CS, OUTPUT);
digitalWrite(BMI323_CS, HIGH); // Deselect sensor
delay(100);
uint8_t chipID = readRegister(CHIP_ID);
Serial.print("Chip ID: 0x");
Serial.println(chipID, HEX);
if (chipID != 0x41) { // Check the expected chip ID
Serial.println("ERROR: BMI323 not detected correctly!");
while (1);
}
writeRegister(ACC_CONF, 0x708B); // Configure Accelerometer
writeRegister(GYR_CONF, 0x708B); // Configure Gyroscope
}
void loop() {
int16_t x = readRegister16(0x03);
int16_t y = readRegister16(0x05);
int16_t z = readRegister16(0x07);
Serial.print("X: "); Serial.print(x);
Serial.print("\tY: "); Serial.print(y);
Serial.print("\tZ: "); Serial.println(z);
delay(500);
}
// SPI Read
uint8_t readRegister(uint8_t reg) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg | 0x80); // Set Read bit
uint8_t data = SPI.transfer(0x00);
digitalWrite(BMI323_CS, HIGH);
return data;
}
// SPI Read 16-bit
uint16_t readRegister16(uint8_t reg) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg | 0x80); // Set Read bit
uint8_t highByte = SPI.transfer(0x00);
uint8_t lowByte = SPI.transfer(0x00);
digitalWrite(BMI323_CS, HIGH);
return (highByte << 8) | lowByte;
}
// SPI Write
void writeRegister(uint8_t reg, uint8_t value) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg & 0x7F); // Clear Read bit
SPI.transfer(value);
digitalWrite(BMI323_CS, HIGH);
}
i try this code using spi in arduino uno but my sensor is not detected
11 posts - 4 participants