kai wang
/
mbed_health
久坐警报器
main.cpp@0:76c6ddb1425b, 2016-05-08 (annotated)
- Committer:
- limr
- Date:
- Sun May 08 14:36:12 2016 +0000
- Revision:
- 0:76c6ddb1425b
- Child:
- 1:32df8ff2011e
?????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
limr | 0:76c6ddb1425b | 1 | #include "mbed.h" |
limr | 0:76c6ddb1425b | 2 | #include"time.h" |
limr | 0:76c6ddb1425b | 3 | |
limr | 0:76c6ddb1425b | 4 | #define UPA 2000//坐时最大加速度值 |
limr | 0:76c6ddb1425b | 5 | |
limr | 0:76c6ddb1425b | 6 | uint16_t x_a,y_a,z_a; |
limr | 0:76c6ddb1425b | 7 | bool flag = 0; |
limr | 0:76c6ddb1425b | 8 | |
limr | 0:76c6ddb1425b | 9 | SPI spi_master(P0_6,P0_5,P0_7); //mosi miso sclk |
limr | 0:76c6ddb1425b | 10 | DigitalOut cs(P0_4); |
limr | 0:76c6ddb1425b | 11 | |
limr | 0:76c6ddb1425b | 12 | //Serial pc(P0_23,P0_25); |
limr | 0:76c6ddb1425b | 13 | |
limr | 0:76c6ddb1425b | 14 | Serial pc(P0_9,P0_11); |
limr | 0:76c6ddb1425b | 15 | |
limr | 0:76c6ddb1425b | 16 | PwmOut buzzer(p22);//buzzer |
limr | 0:76c6ddb1425b | 17 | float frequency[]={659,554,659,554,440,494,554,587,494,659,554,440}; |
limr | 0:76c6ddb1425b | 18 | float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2}; //节拍数组 |
limr | 0:76c6ddb1425b | 19 | |
limr | 0:76c6ddb1425b | 20 | uint8_t LIS3DH_SPI_RD(uint8_t addr) |
limr | 0:76c6ddb1425b | 21 | { |
limr | 0:76c6ddb1425b | 22 | uint8_t temp; |
limr | 0:76c6ddb1425b | 23 | cs = 0; |
limr | 0:76c6ddb1425b | 24 | wait_us(10); |
limr | 0:76c6ddb1425b | 25 | spi_master.write(addr); |
limr | 0:76c6ddb1425b | 26 | temp=spi_master.write(0xff); |
limr | 0:76c6ddb1425b | 27 | wait_us(10); |
limr | 0:76c6ddb1425b | 28 | cs = 1; |
limr | 0:76c6ddb1425b | 29 | return temp; |
limr | 0:76c6ddb1425b | 30 | } |
limr | 0:76c6ddb1425b | 31 | |
limr | 0:76c6ddb1425b | 32 | void LIS3DH_SPI_WR(uint8_t addr,uint8_t wrdata) |
limr | 0:76c6ddb1425b | 33 | { |
limr | 0:76c6ddb1425b | 34 | cs = 0; |
limr | 0:76c6ddb1425b | 35 | wait_us(10); |
limr | 0:76c6ddb1425b | 36 | spi_master.write(addr); |
limr | 0:76c6ddb1425b | 37 | spi_master.write(wrdata); |
limr | 0:76c6ddb1425b | 38 | wait_us(10); |
limr | 0:76c6ddb1425b | 39 | cs = 1; |
limr | 0:76c6ddb1425b | 40 | } |
limr | 0:76c6ddb1425b | 41 | |
limr | 0:76c6ddb1425b | 42 | void SPI_LIS3DH_Init()//启动函数 |
limr | 0:76c6ddb1425b | 43 | { |
limr | 0:76c6ddb1425b | 44 | spi_master.format(8,3); |
limr | 0:76c6ddb1425b | 45 | spi_master.frequency(100000); |
limr | 0:76c6ddb1425b | 46 | wait_ms(5); |
limr | 0:76c6ddb1425b | 47 | LIS3DH_SPI_WR(0x24,0x80); |
limr | 0:76c6ddb1425b | 48 | wait_ms(5); |
limr | 0:76c6ddb1425b | 49 | LIS3DH_SPI_WR(0x20,0x17); |
limr | 0:76c6ddb1425b | 50 | LIS3DH_SPI_WR(0x23,0x80); |
limr | 0:76c6ddb1425b | 51 | } |
limr | 0:76c6ddb1425b | 52 | |
limr | 0:76c6ddb1425b | 53 | void get_val(void)//得到加速度函数 |
limr | 0:76c6ddb1425b | 54 | { |
limr | 0:76c6ddb1425b | 55 | uint8_t Dx_L=1,Dy_L=1,Dz_L=1; |
limr | 0:76c6ddb1425b | 56 | uint8_t Dx_H=1,Dy_H=1,Dz_H=1; |
limr | 0:76c6ddb1425b | 57 | if(LIS3DH_SPI_RD(0x0f|0x80)==0x33) |
limr | 0:76c6ddb1425b | 58 | { |
limr | 0:76c6ddb1425b | 59 | printf("check device ok!\r\n"); |
limr | 0:76c6ddb1425b | 60 | flag=1; |
limr | 0:76c6ddb1425b | 61 | Dx_H=LIS3DH_SPI_RD(0x29|0x80); |
limr | 0:76c6ddb1425b | 62 | Dx_L=LIS3DH_SPI_RD(0x28|0x80); |
limr | 0:76c6ddb1425b | 63 | Dy_H=LIS3DH_SPI_RD(0x2b|0x80); |
limr | 0:76c6ddb1425b | 64 | Dy_L=LIS3DH_SPI_RD(0x2A|0x80); |
limr | 0:76c6ddb1425b | 65 | Dz_H=LIS3DH_SPI_RD(0x2d|0x80); |
limr | 0:76c6ddb1425b | 66 | Dz_L=LIS3DH_SPI_RD(0x2C|0x80); |
limr | 0:76c6ddb1425b | 67 | } |
limr | 0:76c6ddb1425b | 68 | else |
limr | 0:76c6ddb1425b | 69 | { |
limr | 0:76c6ddb1425b | 70 | printf("check device err!\r\n"); |
limr | 0:76c6ddb1425b | 71 | wait(1); |
limr | 0:76c6ddb1425b | 72 | } |
limr | 0:76c6ddb1425b | 73 | x_a=Dx_H<<8|Dx_L/16; |
limr | 0:76c6ddb1425b | 74 | y_a=Dy_H<<8|Dy_L/16; |
limr | 0:76c6ddb1425b | 75 | z_a=Dz_H<<8|Dz_L/16; |
limr | 0:76c6ddb1425b | 76 | } |
limr | 0:76c6ddb1425b | 77 | void buzzerini(void) |
limr | 0:76c6ddb1425b | 78 | { |
limr | 0:76c6ddb1425b | 79 | for (int i=0;i<=11;i++) { |
limr | 0:76c6ddb1425b | 80 | buzzer.period(1/(2*frequency[i])); // 设置PWM周期 |
limr | 0:76c6ddb1425b | 81 | buzzer=0.5; // 设置占空比 |
limr | 0:76c6ddb1425b | 82 | wait(0.4*beat[i]); // 保持节拍周期 |
limr | 0:76c6ddb1425b | 83 | } |
limr | 0:76c6ddb1425b | 84 | } |
limr | 0:76c6ddb1425b | 85 | void sit_judgement() |
limr | 0:76c6ddb1425b | 86 | { int flag=0; |
limr | 0:76c6ddb1425b | 87 | clock_t start,end; |
limr | 0:76c6ddb1425b | 88 | start=clock(); |
limr | 0:76c6ddb1425b | 89 | get_val(); |
limr | 0:76c6ddb1425b | 90 | while(x_a<=UPA) |
limr | 0:76c6ddb1425b | 91 | { get_val(); |
limr | 0:76c6ddb1425b | 92 | end=clock(); |
limr | 0:76c6ddb1425b | 93 | if(((double)end-start)/CLK_TCK>30)//坐了30s |
limr | 0:76c6ddb1425b | 94 | { flag=1; |
limr | 0:76c6ddb1425b | 95 | break; |
limr | 0:76c6ddb1425b | 96 | } |
limr | 0:76c6ddb1425b | 97 | } |
limr | 0:76c6ddb1425b | 98 | while(flag) |
limr | 0:76c6ddb1425b | 99 | { buzzerini(); |
limr | 0:76c6ddb1425b | 100 | get_val(); |
limr | 0:76c6ddb1425b | 101 | } |
limr | 0:76c6ddb1425b | 102 | } |
limr | 0:76c6ddb1425b | 103 | |
limr | 0:76c6ddb1425b | 104 | |
limr | 0:76c6ddb1425b | 105 | |
limr | 0:76c6ddb1425b | 106 | |
limr | 0:76c6ddb1425b | 107 | int main(void) |
limr | 0:76c6ddb1425b | 108 | { |
limr | 0:76c6ddb1425b | 109 | SPI_LIS3DH_Init(); |
limr | 0:76c6ddb1425b | 110 | while(1) |
limr | 0:76c6ddb1425b | 111 | { |
limr | 0:76c6ddb1425b | 112 | sit_judgement(); |
limr | 0:76c6ddb1425b | 113 | if(flag) |
limr | 0:76c6ddb1425b | 114 | { |
limr | 0:76c6ddb1425b | 115 | flag=0; |
limr | 0:76c6ddb1425b | 116 | wait(1); |
limr | 0:76c6ddb1425b | 117 | } |
limr | 0:76c6ddb1425b | 118 | } |
limr | 0:76c6ddb1425b | 119 | } |