c语言gsensor急加速算法

c语言gsensor急加速算法,第1张

1、加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。

该数值包含地心引力的影响,单位是m/s^2。

将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。

将手机朝下放在桌面上,z轴为-9.81。

将手机向左倾斜,x轴为正值。

将手机向右倾斜,x轴为负值。

将手机向上倾斜,y轴为负值。

将手机向下倾斜,y轴为正值。

加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。

手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。

这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。

2、例程:

    public class MainActivity extends Activity implements SensorEventListener {  

      

        private static final String TAG = MainActivity.class.getSimpleName()  

        private SensorManager mSensorManager  

        private Sensor mSensor  

        private TextView textviewX  

        private TextView textviewY  

        private TextView textviewZ  

        private TextView textviewF  

      

        private int mX, mY, mZ  

        private long lasttimestamp = 0  

        Calendar mCalendar  

      

        @Override  

        protected void onCreate(Bundle savedInstanceState) {  

            super.onCreate(savedInstanceState)  

            setContentView(R.layout.activity_main)  

            textviewX = (TextView) findViewById(R.id.textView1)  

            textviewY = (TextView) findViewById(R.id.textView3)  

            textviewZ = (TextView) findViewById(R.id.textView4)  

            textviewF = (TextView) findViewById(R.id.textView2)  

      

            mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE)  

            mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)// TYPE_GRAVITY  

            if (null == mSensorManager) {  

                Log.d(TAG, "deveice not support SensorManager")  

            }  

            // 参数三,检测的精准度  

            mSensorManager.registerListener(this, mSensor,  

                    SensorManager.SENSOR_DELAY_NORMAL)// SENSOR_DELAY_GAME  

      

        }  

      

        @Override  

        public void onAccuracyChanged(Sensor sensor, int accuracy) {  

      

        }  

      

        @Override  

        public void onSensorChanged(SensorEvent event) {  

            if (event.sensor == null) {  

                return  

            }  

      

            if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {  

                int x = (int) event.values[0]  

                int y = (int) event.values[1]  

                int z = (int) event.values[2]  

                mCalendar = Calendar.getInstance()  

                long stamp = mCalendar.getTimeInMillis() / 1000l// 1393844912  

      

                textviewX.setText(String.valueOf(x))  

                textviewY.setText(String.valueOf(y))  

                textviewZ.setText(String.valueOf(z))  

      

                int second = mCalendar.get(Calendar.SECOND)// 53  

      

                int px = Math.abs(mX - x)  

                int py = Math.abs(mY - y)  

                int pz = Math.abs(mZ - z)  

                Log.d(TAG, "pX:" + px + "  pY:" + py + "  pZ:" + pz + "    stamp:"  

                        + stamp + "  second:" + second)  

                int maxvalue = getMaxValue(px, py, pz)  

                if (maxvalue > 2 && (stamp - lasttimestamp) > 30) {  

                    lasttimestamp = stamp  

                    Log.d(TAG, " sensor isMoveorchanged....")  

                    textviewF.setText("检测手机在移动..")  

                }  

      

                mX = x  

                mY = y  

                mZ = z  

      

            }  

        }  

      

        /** 

         * 获取一个最大值 

         *  

         * @param px 

         * @param py 

         * @param pz 

         * @return 

         */  

        public int getMaxValue(int px, int py, int pz) {  

            int max = 0  

            if (px > py && px > pz) {  

                max = px  

            } else if (py > px && py > pz) {  

                max = py  

            } else if (pz > px && pz > py) {  

                max = pz  

            }  

      

            return max  

        }  

    }

一、唤醒源

设备休眠后,通过触发唤醒源使设备恢复正常工作模式。设备唤醒源有多种,对于Android设备常见的就有PowerKey、来电唤醒、Alarm唤醒等。

唤醒源的实现处于内核空间,本文重点讨论下PowerKey作为唤醒源的具体实现。

二、PowerKey唤醒源

PowerKey唤醒设备的原理,本质其实就是中断。

PowerKey连接到CPU的一个输入(Input)引脚(Pin)上,该Pin运行在中断模式上。一旦PowerKey按下,引发Pin中断;而该中断具有唤醒CPU的功能,于是设备得以唤醒。

三、PowerKey对应的Pin

Configuration

和PowerKey相连的Pin的具体配置位于板级dts文件中,比如如下配置:

arch/arm/boot/dts/xxxxx.dts

power-key {

/** 是CPU的哪个Pin */

gpios = <&gpio0 GPIO_A5 GPIO_ACTIVE_LOW>

/** Key code  */

linux,code = <116>

/** 起个名字 */

label = "power"

/** 该Pin具有wakeup的功能 */

gpio-key,wakeup

}

着重说下linux,code =

<116>,116怎么来的?

对于键盘,每一个按键都有唯一的编码,在Linux中,编码值位于:

input.h (kernel\include\uapi\linux)

/*

* Keys and buttons

*/

#define KEY_RESERVED 0

#define KEY_ESC 1

#define KEY_BACKSPACE 14

#define KEY_TAB 15

#define KEY_POWER 116 /* SC System Power Down */

可知,PowerKey的编码也在该文件中,且编码值为116;一旦按下PowerKey,该值作为键值传到input_event结构体的code成员变量中:

input.h (kernel\include\uapi\linux)

/*

* The event structure itself

*/

struct input_event {

struct timeval time

__u16 type

__u16 code

__s32 value

}

之后我们会写个Linux应用程序读取code值。

G-sensor中文是重力传感器的意思(英文全称是Gravity-sensor)。

G-sensor能够感知到加速力的变化,加速力就是当物体在加速进程中作用在物体上的力,比如晃动、跌落、上升、降落等各种移动变化都能被G-sensor转化为电信号,然后通过微处理器的计算分析后,就可以够完成程序设计好的功能。

此功能是行车记录仪的传感器检测到车辆紧急制动时,会把那一时间段的录像单独保存,不会自动删除,G-Sensor的高中低是指其传感器的敏感度。

行车记录仪即记录车辆行驶途中的影像及声音等相关资讯的仪器。安装行车记录仪后,能够记录汽车行驶全过程的视频图像和声音,可为交通事故提供证据。喜欢自驾游的人,还可以用它来记录征服艰难险阻的过程。

开车时边走边录像,同时把时间、速度、所在位置都记录在录像里,相当“黑匣子”。也可在家用作DV拍摄生活乐趣,或者做为家用监控使用。平时还可以做停车监控,安装行车记录仪,视频资料不可以裁剪,如果裁剪,在责任事故无法提供帮助。

扩展资料:

G-sensor作用

G-sensor中文是加速度传感器的意思,它能够感知到加速力的变化,加速力就是当物体在加速过程中作用在物体上的力,比如晃动、跌落、上升、下降等各种移动变化都能被G-sensor转化为电信号,然后通过微处理器的计算分析后,就能够完成程序设计好的功能。

比如MP3能根据使用者的甩动方向,前后更换歌曲,放进衣袋的时候也能够计算出使用者的前进步伐。

个别高端笔记本例如IBM高端系列也内置了G-sensor,在感知发生剧烈加速度时(如开始跌落),立即保护硬盘,避免硬盘损害。

简单的说,G-Sensor是智能化重力感应系统,应用在硬盘上可以检测当前硬盘的状态,当发生意外跌落时,会产生加速度,硬盘感应到加速度,磁头就会自动归位,使盘体和磁头分离,防止在读写 *** 作的时候受到意外的冲击,从而有效的保护硬盘。

行车记录仪的功能:

1、维护司机的合法权益,对横穿公路的行人及骑自行车、摩托车的,万一和他们产生了刮碰,有可能会被敲诈勒索,如果有了行车记录仪,司机可为自己提供有效的证据。

2、将监控录像记录回放,事故责任一目了然,交警处理事故快速准确;既可快速撤离现场恢复交通,又可保留事发时的有效证据,营造安全畅通的交通环境。

3、如果每辆车上都安装行车记录仪,司机也不敢随便违章行驶,事故发生率也会大幅度下降,肇事车辆都会被其他车辆的行车记录仪拍摄下来,交通肇事逃逸案将大大减少。

4、法院在审理道路交通事故案件时,在量刑和赔偿上将更加准确和有据可依,也给保险公司的理赔提供了证据。

5、碰到专业碰瓷的和拦路抢劫的,行车记录仪将可以提供破案的决定性的证据:事故发生现场和案犯的外貌特征等。

6、喜欢自驾游的朋友,还可以用它来记录征服艰难险阻的过程。开车时边走边录像,同时把时间、速度、所在位置都记录在录像里,相当于“黑匣子”。

7、可在家用作DV拍摄生活乐趣,或者做为家用监控使用。平时还可以做停车监控。

8、由于新闻记者工作者并非先知者,俄罗斯陨石坠落的新闻,几乎全部是记录仪将画面记录下来。

参考资料来源:百度百科-G-sensor


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7887418.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存