roll acc gyro roll — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by josephkinuthia541.

Components

Sketch code

#include <Wire.h>


// =====================================================
// LSM6DS3 I2C ADDRESS
// =====================================================

#define LSM6DS3_ADDR 0x6A


// =====================================================
// LSM6DS3 REGISTERS
// =====================================================

#define WHO_AM_I     0x0F
#define CTRL1_XL     0x10
#define CTRL2_G      0x11

#define OUTX_L_G     0x22
#define OUTX_L_XL    0x28


// =====================================================
// WRITE TO A REGISTER
// =====================================================

void writeRegister(byte reg, byte value)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.write(value);

  Wire.endTransmission();
}


// =====================================================
// READ ONE BYTE FROM A REGISTER
// =====================================================

byte readRegister(byte reg)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.endTransmission(false);

  Wire.requestFrom(LSM6DS3_ADDR, 1);

  return Wire.read();
}


// =====================================================
// READ TWO BYTES FROM A REGISTER
// =====================================================

int16_t read16(byte reg)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.endTransmission(false);

  Wire.requestFrom(LSM6DS3_ADDR, 2);

  byte low = Wire.read();

  byte high = Wire.read();

  return (int16_t)(high << 8 | low);
}


// =====================================================
// SETUP
// =====================================================

void setup()
{
  Serial.begin(115200);


  // Start I2C
  // SDA = GPIO 21
  // SCL = GPIO 22

  Wire.begin(21, 22);

  delay(100);


  // ===================================================
  // CHECK SENSOR ID
  // ===================================================

  byte who = readRegister(WHO_AM_I);

  Serial.print("WHO_AM_I = 0x");

  Serial.println(who, HEX);


  // ===================================================
  // CONFIGURE ACCELEROMETER
  // ===================================================
  //
  // 104 Hz
  // +/- 4 G
  //

  writeRegister(CTRL1_XL, 0x48);


  // ===================================================
  // CONFIGURE GYROSCOPE
  // ===================================================
  //
  // 104 Hz
  // +/- 245 degrees/second
  //

  writeRegister(CTRL2_G, 0x40);


  // ===================================================
  // CHECK ACCELEROMETER CONFIGURATION
  // ===================================================

  Serial.print("CTRL1_XL: 0x");

  Serial.println(readRegister(CTRL1_XL), HEX);


  Serial.println("LSM6DS3 started.");

  Serial.println();
}


// =====================================================
// MAIN LOOP
// =====================================================

void loop()
{

  // ===================================================
  // READ RAW GYROSCOPE
  // ===================================================

More projects by josephkinuthia541