i don't know what is wrong
this code already made in arduino sketch
but i have to use avrstudio
that's why make code avrstudio but what is wrong?
plz help me
/*
- airbag.c
- Created: 2020-05-14 오후 6:54:33
- Author: KMJ
*/
#define num 20
#include <Wire.h>
#include <I2Cdev.h>
#include <Servo.h>
#define MPU6050_AXOFFSET 158
#define MPU6050_AYOFFSET 9
#define MPU6050_AZOFFSET -91
#define MPU6050_GXOFFSET 19
#define MPU6050_GYOFFSET -42
#define MPU6050_GZOFFSET -26
Servo servo;
long sampling_timer;
const int MPU_addr = 0x68; // I2C address of the MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
float GAcX, GAcY, GAcZ; // Convert accelerometer to gravity value
float Cal_GyX,Cal_GyY,Cal_GyZ;
float acc_roll, acc_pitch, acc_yaw; // Pitch, Roll & Yaw from Accelerometer
float angle_roll, angle_roll_pre, angle_pitch, angle_pitch_pre, angle_yaw; // Angle of Pitch, Roll, & Yaw
float alpha = 0.96; // Complementary constant
float sv_x[num], sv_y[num], sv_z[num], s_r[num];//, s_da_x[num], s_da_y[num];
float fv_x, fv_y, fv_z, fv_r;//, fv_da_x, fv_da_y;
int value = 0;
//////////////////////////////////////////////////////////////////////////////////////////
const float ts = 0.001*0.001;
unsigned long tCount = 0;
unsigned long tCountPre = 0;
#include <avr/io.h>
int main(void)
{
Wire.begin();
servo.attach(9);
init_MPU6050();
Serial.begin(115200);
while(1)
{
// Read raw data of MPU6050
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers
AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
AcX -= MPU6050_AXOFFSET;
AcY -= MPU6050_AYOFFSET;
AcZ -= MPU6050_AZOFFSET;
GyX -= MPU6050_GXOFFSET;
GyY -= MPU6050_GXOFFSET;
GyZ -= MPU6050_GXOFFSET;
// Convert accelerometer to gravity value
GAcX = (float) AcX / 4096.0;
GAcY = (float) AcY / 4096.0;
GAcZ = (float) AcZ / 4096.0;
// Calculate Pitch, Roll & Yaw from Accelerometer value
acc_pitch = atan ((GAcY - (float)MPU6050_AYOFFSET/4096.0) / sqrt(GAcX * GAcX + GAcZ * GAcZ)) * 57.29577951; // 180 / PI = 57.29577951
acc_roll = - atan ((GAcX - (float)MPU6050_AXOFFSET/4096.0) / sqrt(GAcY * GAcY + GAcZ * GAcZ)) * 57.29577951;
//acc_yaw = atan ((GAcZ - (float)MPU6050_AZOFFSET/4096.0) / sqrt(GAcX * GAcX + GAcZ * GAcZ)) * 57.29577951;
acc_yaw = atan (sqrt(GAcX * GAcX + GAcZ * GAcZ) / (GAcZ - (float)MPU6050_AZOFFSET/4096.0)) * 57.29577951;
angle_pitch = alpha * (((float)(GyY - MPU6050_GYOFFSET) * 0.000244140625) + angle_pitch) + (1 - alpha) * acc_pitch;
angle_roll = alpha * (((float)(GyX - MPU6050_GXOFFSET) * 0.000244140625) + angle_roll) + (1 - alpha) * acc_roll;
angle_yaw += (float)(GyZ - MPU6050_GZOFFSET) * 0.000244140625; // Accelerometer doesn't have yaw value
for (int i = 0; i < num - 1; i++)
{
sv_x = sv_x[i + 1];
sv_y = sv_y[i + 1];
sv_z = sv_z[i + 1];
s_r = s_r[i + 1];
}
sv_x[num - 1] = AcX;
sv_y[num - 1] = AcY;
sv_z[num - 1] = AcZ;
s_r[num - 1] = (sqrt(fv_z * fv_z + fv_y * fv_y));
for (int i = 0; i < num; i++)
{
fv_x += sv_x;
fv_y += sv_y;
fv_z += sv_z;
fv_r += s_r;
// fv_da_x += s_da_x;
// fv_da_y += s_da_y;
}
fv_x /= num;
fv_y /= num;
fv_z /= num;
fv_r /= num;
// fv_da_x /= num;
// fv_da_y /= num;
mpu6050_result_acc();
Serial.print(" result_acc = "); Serial.println((sqrt(fv_z * fv_z + fv_y * fv_y)));
// Sampling Timer
while (micros() - sampling_timer < 4000); //
sampling_timer = micros(); //Reset the sampling timer
//TODO:: Please write your application code
}
}
void mpu6050_result_acc()
{
if (( sqrt(fv_z * fv_z + fv_y * fv_y) > 25000 ))
{ value = 60; servo.write(value); }
}
/*
void mpu6050_angle_yaw()
{
if (( angle_yaw > 15000 ))
{ value = 60; servo.write(value); }
if (( angle_yaw < -15000 ))
{ value = 60; servo.write(value); }
}
void mpu6050_acc_y()
{
if (( fv_y > 15000 ))
{ value = 60; servo.write(value); }
if (( fv_y < -15000 ))
{ value = 60; servo.write(value); }
}
void mpu6050_result_angle()
{
if ((fv_xcos(angle_roll)+fv_ysin(angle_pitch))> 500 )
{ value = 60; servo.write(value); }
}
*/
void init_MPU6050() {
//MPU6050 Initializing & Reset
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
//MPU6050 Clock Type
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0x03); // Selection Clock 'PLL with Z axis gyroscope reference'
Wire.endTransmission(true);
//MPU6050 Gyroscope Configuration Setting
Wire.beginTransmission(MPU_addr);
Wire.write(0x1B); // Gyroscope Configuration register
Wire.write(0x00); // FS_SEL=0, Full Scale Range = +/- 250 [degree/sec]
//Wire.write(0x08); // FS_SEL=1, Full Scale Range = +/- 500 [degree/sec]
//Wire.write(0x10); // FS_SEL=2, Full Scale Range = +/- 1000 [degree/sec]
//Wire.write(0x18); // FS_SEL=3, Full Scale Range = +/- 2000 [degree/sec]
Wire.endTransmission(true);
//MPU6050 Accelerometer Configuration Setting
Wire.beginTransmission(MPU_addr);
Wire.write(0x1C); // Accelerometer Configuration register
Wire.write(0x00); // AFS_SEL=0, Full Scale Range = +/- 2 [g]
//Wire.write(0x08); // AFS_SEL=1, Full Scale Range = +/- 4 [g]
//Wire.write(0x10); // AFS_SEL=2, Full Scale Range = +/- 8 [g]
//Wire.write(0x18); // AFS_SEL=3, Full Scale Range = +/- 10 [g]
Wire.endTransmission(true);
//MPU6050 DLPF(Digital Low Pass Filter)
Wire.beginTransmission(MPU_addr);
Wire.write(0x1A); // DLPF_CFG register
Wire.write(0x00); // Accel BW 260Hz, Delay 0ms / Gyro BW 256Hz, Delay 0.98ms, Fs 8KHz
//Wire.write(0x01); // Accel BW 184Hz, Delay 2ms / Gyro BW 188Hz, Delay 1.9ms, Fs 1KHz
//Wire.write(0x02); // Accel BW 94Hz, Delay 3ms / Gyro BW 98Hz, Delay 2.8ms, Fs 1KHz
//Wire.write(0x03); // Accel BW 44Hz, Delay 4.9ms / Gyro BW 42Hz, Delay 4.8ms, Fs 1KHz
//Wire.write(0x04); // Accel BW 21Hz, Delay 8.5ms / Gyro BW 20Hz, Delay 8.3ms, Fs 1KHz
//Wire.write(0x05); // Accel BW 10Hz, Delay 13.8ms / Gyro BW 10Hz, Delay 13.4ms, Fs 1KHz
//Wire.write(0x06); // Accel BW 5Hz, Delay 19ms / Gyro BW 5Hz, Delay 18.6ms, Fs 1KHz
Wire.endTransmission(true);
}