用window.DeviceMotionEvent来判断手机浏览器是否支持访问硬件资源,window.addEventListener('devicemotion',deviceMotionHandler,false);通过上一句代码来对该事件进行监听,第一个参数是事件类型,第二个参数是一个function对事件的处理,在function总通过varacceleration = eventData.accelerationIncludingGravity; 获得加速器对象,x =acceleration.x;y = acceleration.y;z =acceleration.z; 分别获取传感器三个分量的参数,这样就完成了参数的获取。​

接下来,我们开始将数据弄到图表上:

首先,我们定义几个变量:

  1. var oriValuesX = []; //存放x轴数据
  2. var oriValuesY = []; //存放y轴数据
  3. var oriValuesZ = []; //存放z轴数据
  4. var oriValuesSqrt = []; //存放xyz平方相加再开根的数据
  5. var timeX = []; //存放图表x轴的时间,单位:毫秒
  6. var x = y = z = 0; //用以获取xyz轴当前的数据
  7. var startTime = new Date().getTime(); //最初的开始时间,单位:毫秒
  8. var string = ''; //定义一个字符串用来显示数据

随后,开始调用加速度传感器:

  1. if (window.DeviceMotionEvent) {
  2. window.addEventListener('devicemotion', functiondeviceMotionHandler(eventData){
  3. var currTime = new Date().getTime(); //当前时间
  4. var diffTime = currTime - startTime;//当前时间减最初时间,得到当前时间差
  5. timeX.push(diffTime); //将当前时间差存放
  6. var acceleration =eventData.accelerationIncludingGravity; //获得加速器对象
  7. x = acceleration.x; //获取x轴当前加速度
  8. y =acceleration.y; //获取y轴当前加速度
  9. z =acceleration.z; //获取z轴当前加速度
  10. oriValuesX.push(x); //将x轴当前加速度存放
  11. oriValuesY.push(y); //将y轴当前加速度存放
  12. oriValuesZ.push(z); //将z轴当前加速度存放
  13. oriValuesSqrt.push(Math.sqrt(x * x + y * y + z *z)); //将当前xyz加速度平方相加再开根存放
  14. if(timeX.length == 200){ //控制个数
  15. line();//调用line函数,生成图表用的
  16. for(var i= 0 ; i < oriValuesSqrt.length ; i++){
  17. string = string +(timeX[i]+":"+oriValuesSqrt[i]+"
  18. "); //'当前时间:数据' 的形式显示在前台,方便查看数据
  19. }
  20. $('.data').html(string);
  21. }
  22. }, false);
  23. }

再然后就是调用chart.js​,不会用的可以参考上一篇博文://blog.sina.com.cn/s/blog_ad7cad400102xn38.html

混合4个折线,不同颜色:

  1. var line = function(){
  2. var ctx =document.getElementById_x_x_x_x_x_x("myChart");
  3. var myChart = new Chart(ctx, {
  4. type:'line',
  5. data:{
  6. labels: timeX,
  7. datasets: [
  8. {
  9. label:"x",
  10. fill:false,
  11. lineTension: 0.1,
  12. backgroundColor: "rgba(75,192,192,0.4)",
  13. borderColor: "rgba(75,192,192,1)",
  14. borderCapStyle: 'butt',
  15. borderDash: [],
  16. borderDashOffset: 0.0,
  17. borderJoinStyle: 'miter',
  18. pointBorderColor: "rgba(75,192,192,1)",
  19. pointBackgroundColor: "#fff",
  20. pointBorderWidth: 1,
  21. pointHoverRadius: 5,
  22. pointHoverBackgroundColor: "rgba(75,192,192,1)",
  23. pointHoverBorderColor: "rgba(220,220,220,1)",
  24. pointHoverBorderWidth: 2,
  25. pointRadius: 1,
  26. pointHitRadius: 10,
  27. data:oriValuesX,
  28. spanGaps:false,
  29. },
  30. {
  31. label:"y",
  32. fill:false,
  33. lineTension: 0.1,
  34. backgroundColor: "rgba(255, 99, 132, 0.2)",
  35. borderColor: "rgba(255, 99, 132, 1)",
  36. borderCapStyle: 'butt',
  37. borderDash: [],
  38. borderDashOffset: 0.0,
  39. borderJoinStyle: 'miter',
  40. pointBorderColor: "rgba(255, 99, 132, 1)",
  41. pointBackgroundColor: "#fff",
  42. pointBorderWidth: 1,
  43. pointHoverRadius: 5,
  44. pointHoverBackgroundColor: "rgba(255, 99, 132, 1)",
  45. pointHoverBorderColor: "rgba(220,220,220,1)",
  46. pointHoverBorderWidth: 2,
  47. pointRadius: 1,
  48. pointHitRadius: 10,
  49. data:oriValuesY,
  50. spanGaps:false,
  51. },
  52. {
  53. label:"z",
  54. fill:false,
  55. lineTension: 0.1,
  56. backgroundColor: "rgba(153, 102, 255, 0.2)",
  57. borderColor: "rgba(153, 102, 255, 1)",
  58. borderCapStyle: 'butt',
  59. borderDash: [],
  60. borderDashOffset: 0.0,
  61. borderJoinStyle: 'miter',
  62. pointBorderColor: "rgba(153, 102, 255, 1)",
  63. pointBackgroundColor: "#fff",
  64. pointBorderWidth: 1,
  65. pointHoverRadius: 5,
  66. pointHoverBackgroundColor: "rgba(153, 102, 255, 1)",
  67. pointHoverBorderColor: "rgba(220,220,220,1)",
  68. pointHoverBorderWidth: 2,
  69. pointRadius: 1,
  70. pointHitRadius: 10,
  71. data:oriValuesZ,
  72. spanGaps:false,
  73. },
  74. {
  75. label:"sqrt",
  76. fill:false,
  77. lineTension: 0.1,
  78. backgroundColor: "rgba(54, 162, 235, 0.2)",
  79. borderColor: "rgba(54, 162, 235, 1)",
  80. borderCapStyle: 'butt',
  81. borderDash: [],
  82. borderDashOffset: 0.0,
  83. borderJoinStyle: 'miter',
  84. pointBorderColor: "rgba(54, 162, 235, 1)",
  85. pointBackgroundColor: "#fff",
  86. pointBorderWidth: 1,
  87. pointHoverRadius: 5,
  88. pointHoverBackgroundColor: "rgba(54, 162, 235, 1)",
  89. pointHoverBorderColor: "rgba(220,220,220,1)",
  90. pointHoverBorderWidth: 2,
  91. pointRadius: 1,
  92. pointHitRadius: 10,
  93. data:oriValuesSqrt,
  94. spanGaps:false,
  95. }
  96. ]
  97. },
  98. options:{
  99. scales: {
  100. yAxes: [{
  101. ticks:{
  102. beginAtZero: true
  103. }
  104. }]
  105. }
  106. }
  107. });
  108. };

最后再在此script前面加上:

  1. <canvas id="myChart" width="400" height="400"></canvas>
  2. <div class="data"></div>

大功告成,但这个必须在手机上运行才有数据,因为现今的电脑浏览器不能模拟加速度

 

利用h5,chart.js监测手机三轴加速度,用以研究计步算法等的更多相关文章

  1. 【传感器】BMA253 数字,三轴加速度传感器

    参考文档:BMA253E DataSheet 参考文档链接 密码:9new BMA253 数字,三轴加速度传感器 关键特性: 关键特性   封装方式 LGA封装(12pins),长*宽(2mm*2mm ...

  2. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. Arduino I2C + 三轴加速度计LIS3DH

    LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能.主要特性有: 宽工作电压范围:1.71 ~ 3.6V 功耗:低功耗模式2μA:正常工作模式.ODR = 50Hz时功耗11μA ...

  5. 【雕爷学编程】Arduino动手做(48)---三轴ADXL345模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  6. 关于chart.js 设置canvas的宽度为父级元素的宽度的百分百 以及 X轴上面刻度数据太多如何处理

    今天在做一个数据统计的界面的时候,需要做折线统计图,在网上找了一圈发现数据统计的插件还是不少的,本着轻量级的的原则选择了Chart.js,后来在做的过程中便遇到两个问题,以此记录下来,和刚刚接触前端的 ...

  7. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  8. chart.js接口开发:X轴步长和Labels旋转角

    一. 当初为什么选择chart.js 当初项目使用库是Zepto,Zepto能支持的chart处理库太少.也是为了使得项目比较轻量化,所以选择了chart.js. 但是最后的显示结果实在太差,放弃了c ...

  9. Chart.js Y轴数据以百分比展示

    新手一枚,解决的问题喜欢记录,也许正好有人在网上迷茫的百度着.-0- 最近使用Chart.js做折线图的报表展示,直接显示整数啥的很好弄毕竟例子直接在哪里可以用,百分比就没办法了.百度慢慢汲取营养,虽 ...

随机推荐

  1. UVA.10130 SuperSale (DP 01背包)

    UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...

  2. 关于notepad++如何自动补全标签的问题

    转自:https://blog.csdn.net/Panda_Eyes1/article/details/81486331 关于notepad++如何自动补全标签的问题 2018年08月07日 18: ...

  3. noip模拟赛 大芳的逆行板载

    题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇想,在杆子上每1厘米为一个单 ...

  4. oracle 国外网站【转载】

    [转自]:http://www.2cto.com/database/201406/306615.html 1. http://www.oratechinfo.co.uk/ http://www.ora ...

  5. VUE 内置的标签<keep-alive></keep-alive>作用

    <keep-alive></keep-alive> 的作用是 包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染组件

  6. 2015/9/3 Python密码输入屏蔽字符

    在使用Python的过程中,想输入账号和密码,但是密码会随着输入显示在屏幕上,为了解决这个问题需要用到msvcrt模块 这里是使用代码 import msvcrt, sys def pwd_input ...

  7. 2015/8/18 Python基本使用(2)

    关于判断和循环语句 Python的判断和循环语句非常直观,读起来很接近自然语言. 判断语句if标准的if语句是如下结构: if expression: if_suite 如果expression的表达 ...

  8. Linux局域网内文件传送

    先安装ssh服务 sudo apt-get install ssh 普通传输文件,可以使用scp命令 1.将本地文件复制到目标机器: scp  文件名 用户名@目标机器IP:目标机器路径 回车后输入密 ...

  9. jsp04状态管理

    1.http 协议的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器会响应.但当同一个浏览器再次发送请求时,服务器不会知道是刚才那个浏览器. 简单说,服务器[不会保存用户状态],不会记得客 ...

  10. 【poj1222-又一道开关问题】高斯消元求解异或方程组

    题意:给出一个5*6的图,每个灯泡有一个初始状态,1表示亮,0表示灭.每对一个灯泡操作时,会影响周围的灯泡改变亮灭,问如何操作可以使得所有灯泡都关掉. 题解: 这题和上一题几乎完全一样..就是要输出解 ...