#include <Wire.h>

// SC7A20H 传感器 I2C 地址
#define SC7A20H_ADDR 0x19 

// 加速度数据寄存器
#define ACC_X_L 0xA8
#define ACC_X_H 0xA9
#define ACC_Y_L 0xAA
#define ACC_Y_H 0xAB
#define ACC_Z_L 0xAC
#define ACC_Z_H 0xAD

// 初始化 SC7A20H
void initSC7A20H() {
    Wire.begin();  // 初始化 I2C
    delay(10);
    
    // 设置 SC7A20H 进入正常工作模式
    Wire.beginTransmission(SC7A20H_ADDR);
    Wire.write(0x20);  // 控制寄存器 1 (CTRL_REG1)
    Wire.write(0x57);  // 100Hz 采样率, 正常模式, 使能 X/Y/Z 轴
    Wire.endTransmission();
}

// 读取 SC7A20H 单个轴的数据
int16_t readAxis(uint8_t regL, uint8_t regH) {
    Wire.beginTransmission(SC7A20H_ADDR);
    Wire.write(regL);
    Wire.endTransmission();
    Wire.requestFrom(SC7A20H_ADDR, 1);
    uint8_t lsb = Wire.read();

    Wire.beginTransmission(SC7A20H_ADDR);
    Wire.write(regH);
    Wire.endTransmission();
    Wire.requestFrom(SC7A20H_ADDR, 1);
    uint8_t msb = Wire.read();

    // 组合高低字节，右移 4 位
    int16_t value = ((msb << 8) | lsb) >> 4;

    // 处理负数（补码转换）
    if (value & 0x800) {
        value -= 4096;
    }

    return value;
}

void setup() {
    Serial.begin(115200);
    Wire.begin(47, 48);  // SDA = GPIO47, SCL = GPIO48
    initSC7A20H();
}

void loop() {
    int accX = readAxis(ACC_X_L, ACC_X_H);
    int accY = readAxis(ACC_Y_L, ACC_Y_H);
    int accZ = readAxis(ACC_Z_L, ACC_Z_H);

    Serial.print("X: ");
    Serial.print(accX);
    Serial.print("\tY: ");
    Serial.print(accY);
    Serial.print("\tZ: ");
    Serial.println(accZ);

    delay(100); // 每 100ms 读取一次
}
