标题:
这个MPU6050单片机程序如何修改为跌倒报警?
[打印本页]
作者:
跌倒报警
时间:
2020-6-27 15:56
标题:
这个MPU6050单片机程序如何修改为跌倒报警?
帮忙把以下程序修改为一个用52单片机和MPU6050加蜂鸣器报警的跌倒报警装置
#include <regc.51.h>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
sbit SCL=P1^0;
sbit SDA=P1^1;
sbit led1=P2^7;
sbit led2=P2^6;
#define SMPLRT_DIV 0x19
#define CONFIG 0x1A
#define GYRO_CONFIG 0x1B
#define ACCEL_CONFIG 0x1C
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B
#define WHO_AM_I 0x75
#define SlaveAddress 0xD0
uchar dis[4];
int dis_data;
int Acc_X;
int Acc_Y;
int Acc_Z;
int Gyr_X;
int Gyr_Y;
int Gyr_Z;
void delay(unsigned int k);
//MPU6050????
void InitMPU6050();
void Delay5us();
void I2C_Start();
void I2C_Stop();
void I2C_SendACK(bit ack);
bit I2C_RecvACK();
void I2C_SendByte(uchar dat);
uchar I2C_RecvByte();
void I2C_ReadPage();
void I2C_WritePage();
void display_ACCEL_x();
void display_ACCEL_y();
void display_ACCEL_z();
uchar Single_ReadI2C(uchar REG_Address);
void Single_WriteI2C(uchar REG_Address,uchar REG_data);
void lcd_printf(uchar *s,int temp_data)
{
if(temp_data<0)
{
temp_data=-temp_data;
*s='-';
}
else *s=' ';
*++s =temp_data/100+0x30;
temp_data=temp_data%100;
*++s =temp_data/10+0x30;
temp_data=temp_data%10;
*++s =temp_data+0x30;
}
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++);
}
}
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void I2C_Start()
{
SDA = 1;
SCL = 1;
Delay5us();
SDA = 0;
Delay5us();
SCL = 0;
}
void I2C_Stop()
{
SDA = 0;
SCL = 1;
Delay5us();
SDA = 1;
Delay5us();
}
void I2C_SendACK(bit ack)
{
SDA = ack;
SCL = 1;
Delay5us();
SCL = 0;
Delay5us();
}
bit I2C_RecvACK()
{
SCL = 1;
Delay5us();
CY = SDA;
SCL = 0;
Delay5us();
return CY;
}
void I2C_SendByte(uchar dat)
{
uchar i;
for (i=0; i<8; i++)
{
dat <<= 1;
SDA = CY;
SCL = 1;
Delay5us();
SCL = 0;
Delay5us();
}
I2C_RecvACK();
}
uchar I2C_RecvByte()
{
uchar i;
uchar dat = 0;
SDA = 1;
for (i=0; i<8; i++)
{
dat <<= 1;
SCL = 1;
Delay5us();
dat |= SDA;
SCL = 0;
Delay5us();
}
return dat;
}
void Single_WriteI2C(uchar REG_Address,uchar REG_data)
{
I2C_Start();
I2C_SendByte(SlaveAddress);
I2C_SendByte(REG_Address);
I2C_SendByte(REG_data);
I2C_Stop();
}
uchar Single_ReadI2C(uchar REG_Address)
{
uchar REG_data;
I2C_Start();
I2C_SendByte(SlaveAddress);
I2C_SendByte(REG_Address);
I2C_Start();
I2C_SendByte(SlaveAddress+1);
REG_data=I2C_RecvByte();
I2C_SendACK(1);
I2C_Stop();
return REG_data;
}
void InitMPU6050()
{
Single_WriteI2C(PWR_MGMT_1, 0x00);
Single_WriteI2C(SMPLRT_DIV, 0x07);
Single_WriteI2C(CONFIG, 0x06);
Single_WriteI2C(GYRO_CONFIG, 0x18);
Single_WriteI2C(ACCEL_CONFIG, 0x01);
}
int GetData(uchar REG_Address)
{
char H,L;
H=Single_ReadI2C(REG_Address);
L=Single_ReadI2C(REG_Address+1);
return (H<<8)+L;
}
void shuju()
{
Acc_X=GetData(ACCEL_XOUT_H);
Acc_Y=GetData(ACCEL_YOUT_H);
Acc_Z=GetData(ACCEL_ZOUT_H);
Gyr_X=GetData(GYRO_XOUT_H);
Gyr_Y=GetData(GYRO_YOUT_H);
Gyr_Z=GetData(GYRO_ZOUT_H);
}
short ADXL345_Get_Angle(float x , float y , float z , uchar dir)
{
float temp;
float res=0;
switch(dir)
{
case 0:
temp=sqrt((x*x+y*y))/z;
res=atan(temp);
break;
case 1:
temp=x/sqrt((y*y+z*z));
res=atan(temp);
break;
case 2:
temp=y/sqrt((x*x+z*z));
res=atan(temp);
break;
}
return res*180/3.14;
}
void main()
{
delay(500);
InitMPU6050();
while(1)
{
shuju();
if(3>ADXL345_Get_Angle(Acc_X,Acc_Y,Acc_Z,1)>-3)
{
led1=0;
led2=0;
}
if(ADXL345_Get_Angle(Acc_X,Acc_Y,Acc_Z,1)<=-3)
{
led1=1;
led2=0;
}
if(ADXL345_Get_Angle(Acc_X,Acc_Y,Acc_Z,1)>=3)
{
led1=0;
led2=1;
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1