<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
		<id>http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8</id>
		<title>项目二--云端计步器 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8"/>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;action=history"/>
		<updated>2026-04-21T22:32:59Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8582&amp;oldid=prev</id>
		<title>Shengkai81@gmail.com：/* 计步器原理介绍 */</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8582&amp;oldid=prev"/>
				<updated>2015-06-20T08:00:31Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;计步器原理介绍&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;zh-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2015年6月20日 (六) 08:00的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l48&quot; &gt;第48行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第48行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ADXL345检测其三个轴——x、y和z上的加速度。计步器处于未知方向，因此测量精度不应严重依赖于运动轴与加速度计测量轴之间的关系。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ADXL345检测其三个轴——x、y和z上的加速度。计步器处于未知方向，因此测量精度不应严重依赖于运动轴与加速度计测量轴之间的关系。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:yuanlitu.jpg|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;600px&lt;/del&gt;|center|加速度传感器]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:yuanlitu.jpg|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/ins&gt;|center|加速度传感器]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==系统设计方案==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==系统设计方案==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Shengkai81@gmail.com</name></author>	</entry>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8580&amp;oldid=prev</id>
		<title>Shengkai81@gmail.com：/* ADXL34传感器介绍 */</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8580&amp;oldid=prev"/>
				<updated>2015-06-20T07:59:34Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;ADXL34传感器介绍&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;zh-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2015年6月20日 (六) 07:59的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot; &gt;第31行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第31行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;选择ADXL345主要是看重了它的省电特性&amp;quot;测量模式下低至40 μA，待机模式下为0.1 μA&amp;quot;,还配备了32组X,Y,Z FIFO， 功耗对于这个项目是非常重要的，谁也不想几天就去换一块电池！&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;选择ADXL345主要是看重了它的省电特性&amp;quot;测量模式下低至40 μA，待机模式下为0.1 μA&amp;quot;,还配备了32组X,Y,Z FIFO， 功耗对于这个项目是非常重要的，谁也不想几天就去换一块电池！&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ADXL345 说明书&lt;/del&gt;: '''[[media:中文说明书.pdf|ADXL345 中文说明书]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ADXL345说明书&lt;/ins&gt;: '''[[media:中文说明书.pdf|ADXL345 中文说明书]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ADXL345 使用参考&lt;/del&gt;: '''[[media:使用参考.pdf|ADXL345 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;使用参考&lt;/del&gt;]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ADXL345使用参考&lt;/ins&gt;: '''[[media:使用参考.pdf|ADXL345 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;使用参考手册&lt;/ins&gt;]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==计步器原理介绍==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==计步器原理介绍==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Shengkai81@gmail.com</name></author>	</entry>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8576&amp;oldid=prev</id>
		<title>2015年6月20日 (六) 07:54 Shengkai81@gmail.com</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8576&amp;oldid=prev"/>
				<updated>2015-06-20T07:54:08Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;zh-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2015年6月20日 (六) 07:54的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot; &gt;第9行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第9行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程中的所有代码可以通过下面链接直接下载。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程中的所有代码可以通过下面链接直接下载。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;** &lt;/del&gt;源程序: '''[[media:pedometer.zip|所有源程序]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;源程序: '''[[media:pedometer.zip|所有源程序]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==硬件设备==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==硬件设备==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot; &gt;第31行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第31行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;选择ADXL345主要是看重了它的省电特性&amp;quot;测量模式下低至40 μA，待机模式下为0.1 μA&amp;quot;,还配备了32组X,Y,Z FIFO， 功耗对于这个项目是非常重要的，谁也不想几天就去换一块电池！&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;选择ADXL345主要是看重了它的省电特性&amp;quot;测量模式下低至40 μA，待机模式下为0.1 μA&amp;quot;,还配备了32组X,Y,Z FIFO， 功耗对于这个项目是非常重要的，谁也不想几天就去换一块电池！&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;** &lt;/del&gt;ADXL345 说明书: '''[[media:中文说明书.pdf|ADXL345 中文说明书]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ADXL345 说明书: '''[[media:中文说明书.pdf|ADXL345 中文说明书]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;** &lt;/del&gt;ADXL345 使用参考: '''[[media:使用参考.pdf|ADXL345 使用参考]]'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ADXL345 使用参考: '''[[media:使用参考.pdf|ADXL345 使用参考]]'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==计步器原理介绍==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==计步器原理介绍==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Shengkai81@gmail.com</name></author>	</entry>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8575&amp;oldid=prev</id>
		<title>Shengkai81@gmail.com：Created page with &quot;{| style=&quot;width: 800px;&quot; |- |  本教程也是一个microduino和microWRT结合的项目。主要是通过microduino和传感器模块来检测被测对象的运动量，然...&quot;</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E4%BA%8C--%E4%BA%91%E7%AB%AF%E8%AE%A1%E6%AD%A5%E5%99%A8&amp;diff=8575&amp;oldid=prev"/>
				<updated>2015-06-20T07:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{| style=&amp;quot;width: 800px;&amp;quot; |- |  本教程也是一个microduino和microWRT结合的项目。主要是通过microduino和传感器模块来检测被测对象的运动量，然...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| style=&amp;quot;width: 800px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
本教程也是一个microduino和microWRT结合的项目。主要是通过microduino和传感器模块来检测被测对象的运动量，然后通过蓝牙模块将数据传送到microWRT上的microduino core模块。&lt;br /&gt;
Core模块进而将数据通过串口发送给microWRT。最后microWRT会把数据上传到yeelink，用户在任何地方只要能够访问网络，就可以看到运动量。&lt;br /&gt;
&lt;br /&gt;
本教程有microWRT玩家“while（高群）”在microWRT内测活动中完成的。非常感谢“while”。最终解释权归“while”所有。&lt;br /&gt;
&lt;br /&gt;
本教程中的所有代码可以通过下面链接直接下载。&lt;br /&gt;
** 源程序: '''[[media:pedometer.zip|所有源程序]]'''&lt;br /&gt;
&lt;br /&gt;
==硬件设备==&lt;br /&gt;
&lt;br /&gt;
*microWRT           一个&lt;br /&gt;
*Microduino-Core    二个&lt;br /&gt;
*Microduino-BLE     二个&lt;br /&gt;
*Microduino-USBTTL  一个&lt;br /&gt;
*ADXL345传感器      一个&lt;br /&gt;
&lt;br /&gt;
==ADXL34传感器介绍==&lt;br /&gt;
&lt;br /&gt;
项目初始设计阶段是计划使用MPU6050加速度传感器来监测运动数据，但MP6050在省电方面太难调试，之后就把传感器换成了ADXL345加速度传感器。&lt;br /&gt;
&lt;br /&gt;
ADXL345是一款小而薄的低功耗3轴加速度计，分辨率高（13位），测量范围达±16g。数字输出数据为16位二进制补码格式，可通过SPI（3线或4线）或I2C数字接口访问。&lt;br /&gt;
ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度，还可以测量运动或冲击导致的动态加速度。其高分辨率(4 mg/LSB)，能够测量不到1.0°的倾斜角度变化。&lt;br /&gt;
该器件提供多种特殊检测功能。活动和非活动检测功能检测有无运动发生，以及任意轴上的加速度是否超过用户设置的限值。敲击检测功能可以检测单击和双击动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以映射到两个中断输出引脚中的一个。正在申请专利的32级先进先出(FIFO)缓冲器可用于存储数据，最大程度地减少主机处理器的干预。&lt;br /&gt;
低功耗模式支持基于运动的智能电源管理，从而以极低的功耗进行阈值感测和运动加速度测量。&lt;br /&gt;
ADXL345采用3 mm × 5 mm × 1 mm、14引脚小型超薄塑料封装。&lt;br /&gt;
&lt;br /&gt;
选择ADXL345主要是看重了它的省电特性&amp;quot;测量模式下低至40 μA，待机模式下为0.1 μA&amp;quot;,还配备了32组X,Y,Z FIFO， 功耗对于这个项目是非常重要的，谁也不想几天就去换一块电池！&lt;br /&gt;
&lt;br /&gt;
** ADXL345 说明书: '''[[media:中文说明书.pdf|ADXL345 中文说明书]]'''&lt;br /&gt;
** ADXL345 使用参考: '''[[media:使用参考.pdf|ADXL345 使用参考]]'''&lt;br /&gt;
&lt;br /&gt;
==计步器原理介绍==&lt;br /&gt;
&lt;br /&gt;
计步器是一种颇受欢迎的日常锻炼进度监控器，可以激励人们挑战自己，增强体质，帮助瘦身。早期设计利用加重的机械开关检测步伐，并带有一个简单的计数器。&lt;br /&gt;
晃动这些装置时，可以听到有一个金属球来回滑动，或者一个摆锤左右摆动敲击挡块。如今，先进的计步器利用MEMS（微机电系统）惯性传感器和复杂的软件来精确检测真实的步伐。&lt;br /&gt;
MEMS惯性传感器可以更准确地检测步伐，误检率更低。MEMS惯性传感器具有低成本、小尺寸和低功耗的特点，因此越来越多的便携式消费电子设备开始集成计步器功能，&lt;br /&gt;
如音乐播放器和手机等。ADI公司的3轴加速度计ADXL335, ADXL345和ADXL346小巧纤薄，功耗极低，非常适合这种应用。&lt;br /&gt;
&lt;br /&gt;
本文以对步伐特征的研究为基础，描述一个采用3轴加速度计ADXL345的全功能计步器参考设计，它能辨别并计数步伐，测量距离、速度甚至所消耗的卡路里。&lt;br /&gt;
ADXL345专有的片内32级先进先出(FIFO)缓冲器可以存储数据，并执行计步器应用的相关操作，从而最大程度地减少主处理器干预，为便携式设备节省宝贵的系统功率。&lt;br /&gt;
其13位分辨率(4 mg/LSB)甚至允许计步器以合理的精度测量超低速步行（每步加速度变化约55 mg）。了解模型在可用于分析跑步或步行的特征当中，&lt;br /&gt;
我们选择“加速度”作为相关参数。个体（及其相关轴）的运动包括三个分量，分别是前向（“滚动”）、竖向（“偏航”）和侧向（“俯仰”），如图所示。&lt;br /&gt;
ADXL345检测其三个轴——x、y和z上的加速度。计步器处于未知方向，因此测量精度不应严重依赖于运动轴与加速度计测量轴之间的关系。&lt;br /&gt;
&lt;br /&gt;
[[File:yuanlitu.jpg|600px|center|加速度传感器]]&lt;br /&gt;
&lt;br /&gt;
==系统设计方案==&lt;br /&gt;
&lt;br /&gt;
1.设置ADXL345传感器为50Hz采样率，因为配备了FIFO，可以存储32组X,Y,Z数据，所以0.64秒才需要读取一次数据，其他时间arduino可以进入休眠模式&lt;br /&gt;
2.当ADXL345把FIFO数据填充好以后会触发中断，把arduino从休眠模式唤醒处理获取到的32组X,Y,Z传感器数据，判断用户（小动物）是否迈出了一步，&lt;br /&gt;
具体算法请参考analog公司计步器原理.(http://www.analog.com/library/analogDialogue/china/archives/44-06/pedometer.html)&lt;br /&gt;
3.统计用户（小动物）每10分钟走了多少步，唤醒机制是使用了arduino的看门狗模块，把数据通过蓝牙透明串口模块发送给MicroWRT模块。&lt;br /&gt;
4.MicroWRT获取到的数据通过上传到Yeelink，我们可以通过Yeelink网页或者客户端查看到运动数据。&lt;br /&gt;
&lt;br /&gt;
==Microduino端设计==&lt;br /&gt;
&lt;br /&gt;
1. 硬件连接如下表所示。&lt;br /&gt;
&lt;br /&gt;
引脚表&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Microduino引脚 !! ADXL345引脚 &lt;br /&gt;
|-&lt;br /&gt;
|  10 || CS || &lt;br /&gt;
|-&lt;br /&gt;
|  11 || SDA ||&lt;br /&gt;
|-&lt;br /&gt;
|  12 || SDO || &lt;br /&gt;
|-&lt;br /&gt;
|  13 || SCL || &lt;br /&gt;
|-&lt;br /&gt;
|  3V3|| VCC ||&lt;br /&gt;
|-&lt;br /&gt;
|  GND|| GND || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
2. Microduino Core 代码&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/sleep.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/wdt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;  //调用arduino自带的I2C库&lt;br /&gt;
 &lt;br /&gt;
    #define ADXL345_REG_DEVID               0x00    // Device ID&lt;br /&gt;
    #define ADXL345_REG_THRESH_TAP          0x1D    // Tap threshold&lt;br /&gt;
    #define ADXL345_REG_OFSX                0x1E    // X-axis offset&lt;br /&gt;
    #define ADXL345_REG_OFSY                0x1F    // Y-axis offset&lt;br /&gt;
    #define ADXL345_REG_OFSZ                0x20    // Z-axis offset&lt;br /&gt;
    #define ADXL345_REG_DUR                 0x21    // Tap duration&lt;br /&gt;
    #define ADXL345_REG_LATENT              0x22    // Tap latency&lt;br /&gt;
    #define ADXL345_REG_WINDOW              0x23    // Tap window&lt;br /&gt;
    #define ADXL345_REG_THRESH_ACT          0x24    // Activity threshold&lt;br /&gt;
    #define ADXL345_REG_THRESH_INACT        0x25    // Inactivity threshold&lt;br /&gt;
    #define ADXL345_REG_TIME_INACT          0x26    // Inactivity time&lt;br /&gt;
    #define ADXL345_REG_ACT_INACT_CTL       0x27    // Axis enable control for activity and inactivity detection&lt;br /&gt;
    #define ADXL345_REG_THRESH_FF           0x28    // Free-fall threshold&lt;br /&gt;
    #define ADXL345_REG_TIME_FF             0x29    // Free-fall time&lt;br /&gt;
    #define ADXL345_REG_TAP_AXES            0x2A    // Axis control for single/double tap&lt;br /&gt;
    #define ADXL345_REG_ACT_TAP_STATUS      0x2B    // Source for single/double tap&lt;br /&gt;
    #define ADXL345_REG_BW_RATE             0x2C    // Data rate and power mode control&lt;br /&gt;
    #define ADXL345_REG_POWER_CTL           0x2D    // Power-saving features control&lt;br /&gt;
    #define ADXL345_REG_INT_ENABLE          0x2E    // Interrupt enable control&lt;br /&gt;
    #define ADXL345_REG_INT_MAP             0x2F    // Interrupt mapping control&lt;br /&gt;
    #define ADXL345_REG_INT_SOURCE          0x30    // Source of interrupts&lt;br /&gt;
    #define ADXL345_REG_DATA_FORMAT         0x31    // Data format control&lt;br /&gt;
    #define ADXL345_REG_DATAX0              0x32    // X-axis data 0&lt;br /&gt;
    #define ADXL345_REG_DATAX1              0x33    // X-axis data 1&lt;br /&gt;
    #define ADXL345_REG_DATAY0              0x34    // Y-axis data 0&lt;br /&gt;
    #define ADXL345_REG_DATAY1              0x35    // Y-axis data 1&lt;br /&gt;
    #define ADXL345_REG_DATAZ0              0x36    // Z-axis data 0&lt;br /&gt;
    #define ADXL345_REG_DATAZ1              0x37    // Z-axis data 1&lt;br /&gt;
    #define ADXL345_REG_FIFO_CTL            0x38    // FIFO control&lt;br /&gt;
    #define ADXL345_REG_FIFO_STATUS         0x39    // FIFO status&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int ADXAddress = 0xA7&amp;gt;&amp;gt;1;  //转换为7位地址&lt;br /&gt;
 &lt;br /&gt;
int X0,X1,X_out;&lt;br /&gt;
int Y0,Y1,Y_out;&lt;br /&gt;
int Z1,Z0,Z_out;&lt;br /&gt;
double Xg,Yg,Zg;&lt;br /&gt;
 &lt;br /&gt;
boolean fifo=false; //fifo中断标志&lt;br /&gt;
 &lt;br /&gt;
int min_x,min_y,min_z;&lt;br /&gt;
int max_x,max_y,max_z;&lt;br /&gt;
 &lt;br /&gt;
int dynamic_threshold_x;//动态阀值x&lt;br /&gt;
int dynamic_threshold_y;//动态阀值y&lt;br /&gt;
int dynamic_threshold_z;//动态阀值z&lt;br /&gt;
int dynamic_threshold;&lt;br /&gt;
 &lt;br /&gt;
int dynamic_accuracy;//动态精度&lt;br /&gt;
 &lt;br /&gt;
byte sample_count;//采样计数&lt;br /&gt;
int time_1;//间隔计数&lt;br /&gt;
int time_2;&lt;br /&gt;
volatile byte timing;//看门狗计时&lt;br /&gt;
 &lt;br /&gt;
byte margin_max;//幅度最大的通道&lt;br /&gt;
 &lt;br /&gt;
int data_out;&lt;br /&gt;
 &lt;br /&gt;
int sample_new;&lt;br /&gt;
int sample_old;&lt;br /&gt;
 &lt;br /&gt;
int slope;//斜率变量&lt;br /&gt;
int Pedometer2;&lt;br /&gt;
int Pedometer3;//时间段内的计步数&lt;br /&gt;
 &lt;br /&gt;
int test;&lt;br /&gt;
 &lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
  delay(100);&lt;br /&gt;
  Serial.begin(115200,SERIAL_8N1);&lt;br /&gt;
  pinMode(10,OUTPUT);&lt;br /&gt;
  digitalWrite(10,HIGH);&lt;br /&gt;
  Wire.begin();  //初始化I2C&lt;br /&gt;
  delay(100);&lt;br /&gt;
   &lt;br /&gt;
  setup_watchdog(9);&lt;br /&gt;
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms&lt;br /&gt;
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec&lt;br /&gt;
  ACSR |=_BV(ACD);//OFF ACD&lt;br /&gt;
  ADCSRA=0;//OFF ADC&lt;br /&gt;
   &lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
  Reg(ADXL345_REG_POWER_CTL,0x00);//待机&lt;br /&gt;
  Reg(ADXL345_REG_BW_RATE,0x09);//数据速率及功率模式控制&lt;br /&gt;
  Reg(ADXL345_REG_DATA_FORMAT,0x28); //数据格式控制,中断电平&lt;br /&gt;
  Reg(ADXL345_REG_INT_MAP,0x03);//中断映射&lt;br /&gt;
  Reg(ADXL345_REG_FIFO_CTL,0xF4);//FIFO控制&lt;br /&gt;
  Reg(ADXL345_REG_INT_ENABLE,0x03);//中断使能控制&lt;br /&gt;
  Reg(ADXL345_REG_POWER_CTL,0x08);//测量 &lt;br /&gt;
  Clea(); &lt;br /&gt;
  attachInterrupt(0, Watermark, FALLING);&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
void Watermark()&lt;br /&gt;
{&lt;br /&gt;
  fifo=true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void Clea()&lt;br /&gt;
{&lt;br /&gt;
      for(int y=0;y&amp;lt;=32;y++)&lt;br /&gt;
    {&lt;br /&gt;
     Wire.beginTransmission(ADXAddress);&lt;br /&gt;
     Wire.write(ADXL345_REG_DATAX0);&lt;br /&gt;
     Wire.write(ADXL345_REG_DATAX1);&lt;br /&gt;
     Wire.endTransmission();&lt;br /&gt;
     Wire.requestFrom(ADXAddress,2);&lt;br /&gt;
    }&lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
void Reg(byte x1,byte x2)&lt;br /&gt;
{&lt;br /&gt;
  Wire.beginTransmission(ADXAddress);&lt;br /&gt;
  Wire.write(x1);&lt;br /&gt;
  Wire.write(x2);&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
void setup_watchdog(int ii) {&lt;br /&gt;
   &lt;br /&gt;
  byte bb;&lt;br /&gt;
   &lt;br /&gt;
  if (ii &amp;gt; 9 ) ii=9;&lt;br /&gt;
  bb=ii &amp;amp; 7;&lt;br /&gt;
  if (ii &amp;gt; 7) bb|= (1&amp;lt;&amp;lt;5);&lt;br /&gt;
  bb|= (1&amp;lt;&amp;lt;WDCE);&lt;br /&gt;
   &lt;br /&gt;
  MCUSR &amp;amp;= ~(1&amp;lt;&amp;lt;WDRF);&lt;br /&gt;
  // start timed sequence&lt;br /&gt;
  WDTCSR |= (1&amp;lt;&amp;lt;WDCE) | (1&amp;lt;&amp;lt;WDE);&lt;br /&gt;
  // set new watchdog timeout value&lt;br /&gt;
  WDTCSR = bb;&lt;br /&gt;
  WDTCSR |= _BV(WDIE);&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
ISR(WDT_vect) {&lt;br /&gt;
 timing++;&lt;br /&gt;
 if(timing&amp;gt;=75)//75*8s=600s&lt;br /&gt;
 {&lt;br /&gt;
  timing=0; &lt;br /&gt;
  //Serial.println(test++);&lt;br /&gt;
  Serial.print(abs( Pedometer2-Pedometer3) );&lt;br /&gt;
  Pedometer3=Pedometer2;&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void Read_fifo()&lt;br /&gt;
{&lt;br /&gt;
  Wire.beginTransmission(ADXAddress);&lt;br /&gt;
  Wire.write(ADXL345_REG_DATAX0);&lt;br /&gt;
  Wire.write(ADXL345_REG_DATAX1);&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
  Wire.requestFrom(ADXAddress,6);&lt;br /&gt;
  if(Wire.available()&amp;lt;=6);&lt;br /&gt;
  {&lt;br /&gt;
    X0 = Wire.read();&lt;br /&gt;
    X1 = Wire.read();&lt;br /&gt;
    Y0 = Wire.read();&lt;br /&gt;
    Y1 = Wire.read();&lt;br /&gt;
    Z0 = Wire.read();&lt;br /&gt;
    Z1 = Wire.read();&lt;br /&gt;
    &lt;br /&gt;
    X1 = X1&amp;lt;&amp;lt;8;&lt;br /&gt;
    X_out = X0+X1;&lt;br /&gt;
    Y1 = Y1&amp;lt;&amp;lt;8;&lt;br /&gt;
    Y_out = Y0+Y1;&lt;br /&gt;
    Z1 = Z1&amp;lt;&amp;lt;8;&lt;br /&gt;
    Z_out = Z0+Z1;   &lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
void Sleep_avr()//睡眠模式&lt;br /&gt;
{&lt;br /&gt;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN  ); // sleep mode is set here&lt;br /&gt;
  sleep_enable();&lt;br /&gt;
  sleep_mode();                        // System sleeps here&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
  if(fifo==true)&lt;br /&gt;
  { &lt;br /&gt;
    fifo=false;&lt;br /&gt;
    for(byte x=0;x&amp;lt;20;x++)&lt;br /&gt;
    {&lt;br /&gt;
      Read_fifo();&lt;br /&gt;
      sample_count++;&lt;br /&gt;
 &lt;br /&gt;
      if(sample_count&amp;lt;=50)&lt;br /&gt;
        {&lt;br /&gt;
          max_x=max(max_x,X_out);//最大最小值&lt;br /&gt;
          min_x=min(min_x,X_out);&lt;br /&gt;
          max_y=max(max_y,Y_out);&lt;br /&gt;
          min_y=min(min_y,Y_out);&lt;br /&gt;
          max_z=max(max_z,Z_out);&lt;br /&gt;
          min_z=min(min_z,Z_out);               &lt;br /&gt;
        }&lt;br /&gt;
      else&lt;br /&gt;
        {  &lt;br /&gt;
           sample_count=0;&lt;br /&gt;
            &lt;br /&gt;
           if( abs(max_x-min_x) &amp;gt; abs(max_y-min_y) &amp;amp;&amp;amp; abs(max_x-min_x) &amp;gt; abs(max_z-min_z) )  //动态精度&lt;br /&gt;
            {margin_max=1;dynamic_accuracy=abs(max_x-min_x)/8;}&lt;br /&gt;
           if( abs(max_y-min_y) &amp;gt; abs(max_x-min_x) &amp;amp;&amp;amp; abs(max_y-min_y) &amp;gt; abs(max_z-min_z) )&lt;br /&gt;
            {margin_max=2;dynamic_accuracy=abs(max_y-min_y)/8;}&lt;br /&gt;
           if( abs(max_z-min_z) &amp;gt; abs(max_x-min_x) &amp;amp;&amp;amp; abs(max_y-min_y) &amp;gt; abs(max_y-min_y) )&lt;br /&gt;
            {margin_max=3;dynamic_accuracy=abs(max_z-min_z)/8;}&lt;br /&gt;
           if(dynamic_accuracy &amp;lt; 10)&lt;br /&gt;
             {&lt;br /&gt;
               dynamic_accuracy=10;&lt;br /&gt;
              } //动态精度&lt;br /&gt;
               &lt;br /&gt;
           dynamic_threshold_x= (max_x+min_x)/2;//动态阀值&lt;br /&gt;
           dynamic_threshold_y= (max_y+min_y)/2;&lt;br /&gt;
           dynamic_threshold_z= (max_z+min_z)/2;           &lt;br /&gt;
           max_x=-10000;max_y=-10000;max_z=-10000;&lt;br /&gt;
           min_x=10000;min_y=10000;min_z=10000;               &lt;br /&gt;
        }//if..else&lt;br /&gt;
     &lt;br /&gt;
           switch(margin_max)&lt;br /&gt;
            {&lt;br /&gt;
              case 1:data_out=X_out; dynamic_threshold=dynamic_threshold_x-10;&lt;br /&gt;
              break;&lt;br /&gt;
              case 2:data_out=Y_out; dynamic_threshold=dynamic_threshold_y-10;&lt;br /&gt;
              break;&lt;br /&gt;
              case 3:data_out=Z_out; dynamic_threshold=dynamic_threshold_z-10;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
          time_1++;&lt;br /&gt;
             &lt;br /&gt;
         //  Serial.print(dynamic_threshold);&lt;br /&gt;
         //  Serial.print(&amp;quot;,&amp;quot;); &lt;br /&gt;
            &lt;br /&gt;
           sample_old=sample_new;&lt;br /&gt;
           if( abs(data_out-sample_new) &amp;gt; dynamic_accuracy ) { sample_new=data_out;} &lt;br /&gt;
        //   Serial.println(sample_old);&lt;br /&gt;
            &lt;br /&gt;
           if(sample_old&amp;gt;dynamic_threshold &amp;amp;&amp;amp; abs(dynamic_threshold-sample_old)&amp;gt;20 ) { slope=1; }&lt;br /&gt;
           if(sample_old&amp;lt;dynamic_threshold &amp;amp;&amp;amp; abs(dynamic_threshold-sample_old)&amp;gt;20 ) &lt;br /&gt;
             { &lt;br /&gt;
               if( slope==1 )&lt;br /&gt;
               {   &lt;br /&gt;
                    slope=0;&lt;br /&gt;
                    if( (time_1 -time_2) &amp;gt;10 &amp;amp;&amp;amp; (time_1-time_2)&amp;lt; 100 ) //时间间隔，判断是否是有效步伐&lt;br /&gt;
                       {&lt;br /&gt;
                         Pedometer2++;&lt;br /&gt;
                       //  Serial.println(Pedometer2++);&lt;br /&gt;
                       }&lt;br /&gt;
                    time_2=time_1;                                             &lt;br /&gt;
               }&lt;br /&gt;
              }&lt;br /&gt;
     &lt;br /&gt;
    }//for&lt;br /&gt;
     &lt;br /&gt;
    Sleep_avr();//Sleep....&lt;br /&gt;
 }//if&lt;br /&gt;
 &lt;br /&gt;
 else&lt;br /&gt;
   {&lt;br /&gt;
    delay(1); &lt;br /&gt;
    Sleep_avr();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
因为使用了ADXL345加速度传感器，所有0.64秒才唤醒arduino读取数据，然后使用低功耗蓝牙4.0透明串口传送数据给MicroWRT上传到Yeelink。&lt;br /&gt;
所以microduino端的功耗非常低，睡眠模式下的功耗只需要10ua，所以这个项目的计步器设计使用2032纽扣电池可以提供几个月的使用时间！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MicroWRT端设计==&lt;br /&gt;
&lt;br /&gt;
1. MicroWRT 代码&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;         //标准输入输出定义&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;        //标准函数库定义&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;        //Unix标准函数定义&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;         //文件控制定义&lt;br /&gt;
#include &amp;lt;termios.h&amp;gt;        //POSIX中断控制定义&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;        //错误号定义&lt;br /&gt;
  &lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
#include&amp;lt;time.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
//using namespace std;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
const char *YEELINK_IP=&amp;quot;42.96.164.52&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
//定义波特率数组&lt;br /&gt;
int speed_arr[] = {B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300};&lt;br /&gt;
int name_arr[] = {115200,38400, 19200, 9600, 4800, 2400, 1200, 300};&lt;br /&gt;
  &lt;br /&gt;
//打开串口&lt;br /&gt;
int open_port(void)&lt;br /&gt;
{&lt;br /&gt;
        int fd;                //串口的标识符&lt;br /&gt;
        //O_NOCTTY用来告诉Linux这个程序不会成为“控制终端”&lt;br /&gt;
        //O_NDELAY用来告诉Linux这个程序不关心DCD信号&lt;br /&gt;
        fd=open(&amp;quot;/dev/ttyS0&amp;quot;,O_RDWR | O_NOCTTY | O_NDELAY);&lt;br /&gt;
        if(fd == -1)&lt;br /&gt;
        {&lt;br /&gt;
                //不能打开串口&lt;br /&gt;
                perror(&amp;quot;open_port: Unable to open /dev/ttyS0 -&amp;quot;);&lt;br /&gt;
                return(fd);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
                fcntl(fd, F_SETFL, 0);&lt;br /&gt;
                printf(&amp;quot;open ttys0 .....\n&amp;quot;);&lt;br /&gt;
                return(fd);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
//设置波特率&lt;br /&gt;
void set_speed_and_parity(int fd, int speed)&lt;br /&gt;
{&lt;br /&gt;
        int i=0;                //设置循环标志——注意不要在for内设置，否则会出错&lt;br /&gt;
        struct termios Opt;        //定义termios结构&lt;br /&gt;
        if(tcgetattr(fd,&amp;amp;Opt)!=0)&lt;br /&gt;
        {&lt;br /&gt;
                perror(&amp;quot;tcgetattr fd&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
        }&lt;br /&gt;
        for(i = 0; i &amp;lt; 8 ; i++)&lt;br /&gt;
            {&lt;br /&gt;
                if(speed == name_arr[i])&lt;br /&gt;
                {        &lt;br /&gt;
                            tcflush(fd, TCIOFLUSH);&lt;br /&gt;
                            cfsetispeed(&amp;amp;Opt, speed_arr[i]);&lt;br /&gt;
                            cfsetospeed(&amp;amp;Opt, speed_arr[i]);&lt;br /&gt;
                        /*tcsetattr函数标志：&lt;br /&gt;
                        TCSANOW：立即执行而不等待数据发送或者接受完成。&lt;br /&gt;
                        TCSADRAIN：等待所有数据传递完成后执行。&lt;br /&gt;
                        TCSAFLUSH：Flush input and output buffers and make the change&lt;br /&gt;
                        */&lt;br /&gt;
                            if(tcsetattr(fd, TCSANOW, &amp;amp;Opt) != 0)&lt;br /&gt;
                            {        &lt;br /&gt;
                                perror(&amp;quot;tcsetattr fd&amp;quot;);&lt;br /&gt;
                                return;&lt;br /&gt;
                            }&lt;br /&gt;
                            tcflush(fd, TCIOFLUSH);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        //设置奇偶校验——默认8个数据位、没有校验位&lt;br /&gt;
        Opt.c_cflag &amp;amp;= ~PARENB;&lt;br /&gt;
        Opt.c_cflag &amp;amp;= ~CSTOPB;&lt;br /&gt;
        Opt.c_cflag &amp;amp;= ~CSIZE;&lt;br /&gt;
        Opt.c_cflag |= CS8;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
//设置奇偶校验——默认8个数据位、没有校验位&lt;br /&gt;
int set_parity()&lt;br /&gt;
{&lt;br /&gt;
        Opt.c_options.c_cflag &amp;amp;= ~PARENB&lt;br /&gt;
        options.c_cflag &amp;amp;= ~CSTOPB&lt;br /&gt;
        options.c_cflag &amp;amp;= ~CSIZE;&lt;br /&gt;
        Opt.c_cflag |= CS8;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
void yeelink(float data)&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
           char tmp[10];&lt;br /&gt;
           sprintf(tmp,&amp;quot;%.3f&amp;quot;,data);&lt;br /&gt;
  &lt;br /&gt;
           struct sockaddr_in addr ;&lt;br /&gt;
  &lt;br /&gt;
           int t=socket(AF_INET,SOCK_STREAM,0);  // TCP&lt;br /&gt;
  &lt;br /&gt;
           bzero(&amp;amp;addr,sizeof(addr));&lt;br /&gt;
           addr.sin_family =AF_INET;  //IPV4&lt;br /&gt;
           addr.sin_port=htons(80); //PORT&lt;br /&gt;
           addr.sin_addr.s_addr=htonl(INADDR_ANY);&lt;br /&gt;
           addr.sin_addr.s_addr=inet_addr(YEELINK_IP);&lt;br /&gt;
  &lt;br /&gt;
           while(connect(t,(struct sockaddr *)&amp;amp;addr,sizeof(addr))==-1)&lt;br /&gt;
           {&lt;br /&gt;
  &lt;br /&gt;
                   printf(&amp;quot;connect eero \n&amp;quot;);&lt;br /&gt;
           }&lt;br /&gt;
  &lt;br /&gt;
           char *data1=&amp;quot;POST /v1.0/device/5167/sensor/30842/datapoints HTTP/1.0\r\nHost: api.yeelink.net\r\nAccept: */*\r\n&amp;quot;; //5167替换成你自己的device号，30842也需替换成你的sensor号&lt;br /&gt;
           send(t,data1,strlen(data1),0);&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
           char *data2=&amp;quot;U-ApiKey: 67f4ce66959dd6d518af60289206f700\r\nContent-Length: &amp;quot;;//替换U-ApiKey&lt;br /&gt;
           send(t,data2,strlen(data2),0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
           char data3[5];&lt;br /&gt;
           sprintf(data3,&amp;quot;%d&amp;quot;,strlen(tmp)+10);&lt;br /&gt;
           send(t,data3,strlen(data3),0);  //写入数据长度&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
           char *data4=&amp;quot;\r\nContent-type: application/json;charset=utf-8\r\n\r\n&amp;quot;;&lt;br /&gt;
           send(t,data4,strlen(data4),0);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
           send(t,&amp;quot;{\&amp;quot;value\&amp;quot;:&amp;quot;,strlen(&amp;quot;{\&amp;quot;value\&amp;quot;:&amp;quot;),0);&lt;br /&gt;
           send(t,tmp,strlen(tmp),0);&lt;br /&gt;
           send(t,&amp;quot;}\r\n&amp;quot;,strlen(&amp;quot;}\r\n&amp;quot;),0);&lt;br /&gt;
  &lt;br /&gt;
           close(t);&lt;br /&gt;
  &lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        int fd;&lt;br /&gt;
        int y;&lt;br /&gt;
        int nread,i;&lt;br /&gt;
        char buff[1024];&lt;br /&gt;
        int test;&lt;br /&gt;
        //打开串口&lt;br /&gt;
        if((fd=open_port())&amp;lt;0)&lt;br /&gt;
            {&lt;br /&gt;
                perror(&amp;quot;open_port error&amp;quot;);&lt;br /&gt;
                return 0;&lt;br /&gt;
            }&lt;br /&gt;
        //设置波特率和校验位&lt;br /&gt;
        set_speed_and_parity(fd,115200);&lt;br /&gt;
        //设置校验位&lt;br /&gt;
        //set_parity();&lt;br /&gt;
  &lt;br /&gt;
        printf(&amp;quot;fd=%d\n&amp;quot;,fd);&lt;br /&gt;
 &lt;br /&gt;
         &lt;br /&gt;
 &lt;br /&gt;
while (1) //循环读取数据&lt;br /&gt;
{   &lt;br /&gt;
        if((nread = read(fd, buff, 512))&amp;gt;0)&lt;br /&gt;
        { &lt;br /&gt;
                //printf(&amp;quot;\nLen %d\n&amp;quot;,nread); &lt;br /&gt;
                   &lt;br /&gt;
                tcflush(fd, TCIOFLUSH); &lt;br /&gt;
                test=atoi(buff);&lt;br /&gt;
                //printf( &amp;quot;%s&amp;quot;, buff);   &lt;br /&gt;
                printf(&amp;quot;%d\n&amp;quot;,test);&lt;br /&gt;
                yeelink(test);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
        //关闭串口&lt;br /&gt;
        close(fd);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. 编译源程序&lt;br /&gt;
在以前的教程中，我们一般都是把源程序复制到openwrt的编译目录，或者是openwrt SDK的编译目录中去编译。其实我们也有一个简单的方法，就是安装好交叉编译工具链在&lt;br /&gt;
HOST主机中，设置环境变量，就可以自由的编译源程序了。具体操作步骤如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;1&amp;gt; 下载交叉编译工具链。当然你也可以自己用openwrt的source code编译。&lt;br /&gt;
下载路径： 链接：http://pan.baidu.com/s/1eQtnfIM 密码：qrye&lt;br /&gt;
&amp;lt;2&amp;gt; 设置环境变量，登陆系统（非root用户），在终端输入：&lt;br /&gt;
    $ sudo gedit ~/.profile(or .bashrc) &lt;br /&gt;
&amp;lt;3&amp;gt; 在此文件末尾加入PATH的设置如下，根据自己的路径修改：&lt;br /&gt;
		export STAGING_DIR='/home/while/OpenWrt-Toolchain/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/'   &lt;br /&gt;
&amp;lt;4&amp;gt; 保存文件，注销在登陆，变量将生效。&lt;br /&gt;
&amp;lt;5&amp;gt; 安装编译环境软件包：&lt;br /&gt;
    sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk&lt;br /&gt;
&amp;lt;6&amp;gt; 进入OpenWrt-Toolchain/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin目录，新建文件hello.c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   printf(&amp;quot;hello world!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;7&amp;gt;然后终端进入OpenWrt-Toolchain/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin 目录，根据你自己的目录修改，&lt;br /&gt;
输入./mipsel-openwrt-linux-gcc hello.c -o hello 回车，然后bin目录下就会出现hello文件，复制到openwrt开发板设置下0755权限就可以运行了。&lt;br /&gt;
写其他程序只有修改下hello.c的源代码就可以了！&lt;br /&gt;
&lt;br /&gt;
经过上面的步骤，我们只要把microWRT的源程序复制到hello.c 中，就可以很容易的编译出执行文件。然后上传到microWRT去运行。&lt;br /&gt;
&lt;br /&gt;
==测试==&lt;br /&gt;
&lt;br /&gt;
MicroWRT会把前10分钟所走的步数上传到Yeelink上，所以下图中的每个数据都是10分钟的步数和。&lt;br /&gt;
&lt;br /&gt;
[[File:yeelink.png|600px|center|云端数据]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shengkai81@gmail.com</name></author>	</entry>

	</feed>