UPDATED EMERGENCY STOP..RESET — ESP32 simulation

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

Components

Sketch code

#include <Wire.h>

// ============================================================
// ESP32 QUADCOPTER FLIGHT CONTROLLER
// STAGE 11H
// ATTITUDE + PID + SAFETY CONTROL
// ============================================================


// ============================================================
// MOTOR PINS
// ============================================================

const int M1 = 25;
const int M2 = 26;
const int M3 = 27;
const int M4 = 14;


// ============================================================
// JOYSTICK PINS
// ============================================================

const int throttlePin = 34;
const int rollPin     = 35;
const int pitchPin    = 32;
const int yawPin      = 33;


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

#define IMU_ADDRESS 0x6A

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

#define OUTX_L_G    0x22
#define OUTX_L_XL   0x28


// ============================================================
// IMU VARIABLES
// ============================================================

float accelX = 0.0;
float accelY = 0.0;
float accelZ = 0.0;

float gyroX = 0.0;
float gyroY = 0.0;
float gyroZ = 0.0;


// ============================================================
// CALIBRATION OFFSETS
// ============================================================

float gyroOffsetX = 0.0;
float gyroOffsetY = 0.0;
float gyroOffsetZ = 0.0;

float accelOffsetX = 0.0;
float accelOffsetY = 0.0;
float accelOffsetZ = 0.0;


// ============================================================
// ATTITUDE
// ============================================================

float roll = 0.0;
float pitch = 0.0;

float previousRoll = 0.0;
float previousPitch = 0.0;


// ============================================================
// YAW
// ============================================================

float yawAngle = 0.0;


// ============================================================
// PID VARIABLES
// ============================================================

float rollPID = 0.0;
float pitchPID = 0.0;
float yawPID = 0.0;

float rollIntegral = 0.0;
float pitchIntegral = 0.0;

float previousRollError = 0.0;
float previousPitchError = 0.0;


// ============================================================
// PID SETTINGS
// ============================================================

// Roll PID
float rollKp = 0.80;
float rollKi = 0.00;
float rollKd = 0.25;

// Pitch PID
float pitchKp = 0.80;
float pitchKi = 0.00;
float pitchKd = 0.25;

// Yaw rate P control
float yawKp = 0.50;


// ============================================================
// CONTROL LIMITS
// ============================================================

const float MAX_ANGLE = 30.0;
const float MAX_YAW_RATE = 100.0;

const float PID_LIMIT = 80.0;
const float YAW_PID_LIMIT = 60.0;


// ============================================================
//

More projects by josephkinuthia541