نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
یه کاری کن کدتو کامل برای من بفرست ببینم چه کردی!
همون if ای که نوشتی فقط نکتش اینه به جای صدازدن رله باید به سروو فرمان بدی
مرسی
من این قسمت را اضافه کردم
int relaypin=3;
if(accel_y_scalled<90) digitalWrite (relaypin,LOW);
else digitalWrite (relaypin,HIGH);

اینم کد:
/* Author = helscream (Omer Ikram ul Haq)
Last edit date = 2014-10-08
Website: Arduino with MPU6050 and angle calculation – HobbyLogs
Location: Pakistan
Ver: 0.1 beta --- Start
Ver: 0.2 beta --- Bug fixed for calculating "angle_y_accel" and "angle_x_accel" in "Gyro_header.ino" file
*/


#include <Wire.h>
#include "gyro_accel.h"
// Defining constants
#define dt 20 // time difference in milli seconds
#define rad2degree 57.3 // Radian to degree conversion
#define Filter_gain 0.95 // e.g. angle = angle_gyro*Filter_gain + angle_accel*(1-Filter_gain)
// ************************************************** *******************
// Global Variables
// ************************************************** *******************
unsigned long t=0; // Time Variables
float angle_x_gyro=0,angle_y_gyro=0,angle_z_gyro=0,angle _x_accel=0,angle_y_accel=0,angle_z_accel=0,angle_x =0,angle_y=0,angle_z=0;
// ************************************************** *******************
// Main Code
void setup(){
Serial.begin(115200);
Wire.begin();
MPU6050_ResetWake();
MPU6050_SetGains(0,1);// Setting the lows scale
MPU6050_SetDLPF(0); // Setting the DLPF to inf Bandwidth for calibration
MPU6050_OffsetCal();
MPU6050_SetDLPF(6); // Setting the DLPF to lowest Bandwidth



Serial.print("gyro_x_scalled");
Serial.print("\tgyro_y_scalled");
Serial.print("\tgyro_z_scalled");

Serial.print("\taccel_x_scalled");
Serial.print("\taccel_y_scalled");
Serial.print("\taccel_z_scalled");

Serial.print("\tangle_x_gyro");
Serial.print("\tangle_y_gyro");
Serial.print("\tangle_z_gyro");

Serial.print("\tangle_x_accel");
Serial.print("\tangle_y_accel");
Serial.print("\tangle_z_accel");

Serial.print("\tangle_x");
Serial.print("\tangle_y");
Serial.print("\tangle_z");

Serial.println("\tLoad");



t=millis();
}
void loop(){
t=millis();

MPU6050_ReadData();

angle_x_gyro = (gyro_x_scalled*((float)dt/1000)+angle_x);



angle_y_gyro = (gyro_y_scalled*((float)dt/1000)+angle_y);
int relaypin=3;
if(accel_y_scalled<90) digitalWrite (relaypin,LOW);
else digitalWrite (relaypin,HIGH);

angle_z_gyro = (gyro_z_scalled*((float)dt/1000)+angle_z);



angle_z_accel = atan(accel_z_scalled/(sqrt(accel_y_scalled*accel_y_scalled+accel_x_scal led*accel_x_scalled)))*(float)rad2degree;
angle_y_accel = -atan(accel_y_scalled/(sqrt(accel_y_scalled*accel_y_scalled+accel_z_scal led*accel_z_scalled)))*(float)rad2degree;
angle_x_accel = atan(accel_x_scalled/(sqrt(accel_x_scalled*accel_x_scalled+accel_z_scal led*accel_z_scalled)))*(float)rad2degree;

angle_x = Filter_gain*angle_x_gyro+(1-Filter_gain)*angle_x_accel;
angle_y = Filter_gain*angle_y_gyro+(1-Filter_gain)*angle_y_accel;
angle_z = Filter_gain*angle_z_gyro+(1-Filter_gain)*angle_z_accel;


Serial.print(gyro_x_scalled);
Serial.print("\t");
Serial.print(gyro_y_scalled);
Serial.print("\t");
Serial.print(gyro_z_scalled);
Serial.print("\t");


Serial.print(accel_x_scalled);
Serial.print("\t");
Serial.print(accel_y_scalled);
Serial.print("\t");
Serial.print(accel_z_scalled);
Serial.print("\t");

Serial.print(angle_x_gyro);
Serial.print("\t");
Serial.print(angle_y_gyro);
Serial.print("\t");
Serial.print(angle_z_gyro);
Serial.print("\t");

Serial.print(angle_x_accel);
Serial.print("\t");
Serial.print(angle_y_accel);
Serial.print("\t");
Serial.print(angle_z_accel);
Serial.print("\t");


Serial.print(angle_x);
Serial.print("\t");
Serial.print(angle_y);
Serial.print("\t");
Serial.print(angle_z);
Serial.print("\t");



Serial.println(((float)(millis()-t)/(float)dt)*100);


while((millis()-t) < dt){ // Making sure the cycle time is equal to dt
// Do nothing
}


}