<?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=PPM%E9%AB%98%E7%B2%BE%E5%BA%A6%E6%94%B6%E5%8F%91%E7%A4%BA%E4%BE%8B</id>
		<title>PPM高精度收发示例 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=PPM%E9%AB%98%E7%B2%BE%E5%BA%A6%E6%94%B6%E5%8F%91%E7%A4%BA%E4%BE%8B"/>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=PPM%E9%AB%98%E7%B2%BE%E5%BA%A6%E6%94%B6%E5%8F%91%E7%A4%BA%E4%BE%8B&amp;action=history"/>
		<updated>2026-06-14T01:56:29Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=PPM%E9%AB%98%E7%B2%BE%E5%BA%A6%E6%94%B6%E5%8F%91%E7%A4%BA%E4%BE%8B&amp;diff=21897&amp;oldid=prev</id>
		<title>Wasdpkj@hotmail.com：创建页面，内容为“{| style=&quot;width: 800px;&quot; |- | &lt;p style=&quot;color: #4F4E4E;font-size:220%&quot;&gt;'''PPM高精度收发示例'''&lt;/p&gt; &lt;br&gt; 本示例试验了高精度的PPM编码和解码的通...”</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=PPM%E9%AB%98%E7%B2%BE%E5%BA%A6%E6%94%B6%E5%8F%91%E7%A4%BA%E4%BE%8B&amp;diff=21897&amp;oldid=prev"/>
				<updated>2017-07-26T09:26:21Z</updated>
		
		<summary type="html">&lt;p&gt;创建页面，内容为“{| style=&amp;quot;width: 800px;&amp;quot; |- | &amp;lt;p style=&amp;quot;color: #4F4E4E;font-size:220%&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;PPM高精度收发示例&amp;#039;&amp;#039;&amp;#039;&amp;lt;/p&amp;gt; &amp;lt;br&amp;gt; 本示例试验了高精度的PPM编码和解码的通...”&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;
&amp;lt;p style=&amp;quot;color: #4F4E4E;font-size:220%&amp;quot;&amp;gt;'''PPM高精度收发示例'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
本示例试验了高精度的PPM编码和解码的通讯方法&lt;br /&gt;
&lt;br /&gt;
相比普通精度的8通道编码与解码，本例子精度更高，但通道更少（4通道）&lt;br /&gt;
&lt;br /&gt;
如果需要通道更多的通讯方法，见：'''[[PPM普通收发示例|PPM普通收发示例]]'''&lt;br /&gt;
&lt;br /&gt;
下载完以后，打开接收端串口监视，查看数据&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: #E87E05;font-size:135%&amp;quot;&amp;gt;所需硬件&amp;lt;/p&amp;gt;&lt;br /&gt;
*[[mCookie-Core]] * 2&lt;br /&gt;
*[[mCookie-Battery]] * 2&lt;br /&gt;
*[[mCookie-Hub/zh|mCookie-Hub]] * 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:.jpg|600px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: #E87E05;font-size:135%&amp;quot;&amp;gt;电路搭建&amp;lt;/p&amp;gt;&lt;br /&gt;
分别以mBattery、Core、Hub堆叠在一起，准备两套；将两套HUB的D2/D3引脚通过传感器线连在一起。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
通过MicroUSB数据线接入电脑，分别下载接收和发送的程序。初次使用请参考：[[AVR核心：Getting_started/zh|Getting Started]]。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:.jpg|600px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: #E87E05;font-size:135%&amp;quot;&amp;gt;发送代码&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Microduino_PPM.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PPM PPM;&lt;br /&gt;
&lt;br /&gt;
#define OUTPUT_PIN 2&lt;br /&gt;
#define CHAN_NUM  4&lt;br /&gt;
&lt;br /&gt;
uint16_t value[4] = {&lt;br /&gt;
  128, 256, 384, 512&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void setup () {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  PPM.beginWrite(OUTPUT_PIN, CHAN_NUM * 2); //引脚,通道数（可选，默认8）&lt;br /&gt;
  PPM.setFix(-5);    //发送数据修正,单位us&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop () {&lt;br /&gt;
  writePrecisionData(value, CHAN_NUM);&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void writePrecisionData(uint16_t* _value , uint8_t _num) {&lt;br /&gt;
  uint16_t _data[8];&lt;br /&gt;
  for (uint8_t a = 0; a &amp;lt; _num; a ++) {&lt;br /&gt;
    _data[a * 2] = _value[a] &amp;gt;&amp;gt; 5;&lt;br /&gt;
    _data[a * 2 + 1] = _value[a] &amp;amp; 0x1f;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; CHAN_NUM * 2; i++) {&lt;br /&gt;
    int pulseWidth = map(_data[i], 0, 31, 1000, 2000);&lt;br /&gt;
    PPM.Write(i, pulseWidth);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: #E87E05;font-size:135%&amp;quot;&amp;gt;接收代码&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Microduino_PPM.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PPM PPM;&lt;br /&gt;
&lt;br /&gt;
#define INPUT_PIN 2	//必须为中断脚&lt;br /&gt;
&lt;br /&gt;
uint16_t value[4];&lt;br /&gt;
&lt;br /&gt;
void setup () {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  PPM.beginRead(INPUT_PIN); //必须为中断脚&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop () {&lt;br /&gt;
  uint8_t numChannel = PPM.getChannel() / 2; //获取通道数&lt;br /&gt;
  Serial.print(&amp;quot;numChannel:&amp;quot;);&lt;br /&gt;
  Serial.println(numChannel);&lt;br /&gt;
  readPrecisionData(value, numChannel);&lt;br /&gt;
  for (int i = 0; i &amp;lt; numChannel; i++) {&lt;br /&gt;
    Serial.print(value[i]);&lt;br /&gt;
    if (i &amp;lt; numChannel - 1) {&lt;br /&gt;
      Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float f_map(float x, float in_min, float in_max, float out_min, float out_max) {&lt;br /&gt;
  return float((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void readPrecisionData(uint16_t* _value , uint8_t _num) {&lt;br /&gt;
  uint16_t _data[8];&lt;br /&gt;
  PPM.Read(_data);&lt;br /&gt;
  float _f_data[_num * 2];&lt;br /&gt;
&lt;br /&gt;
  for (uint8_t a = 0; a &amp;lt; _num * 2; a++) {&lt;br /&gt;
    _f_data[a] = f_map( _data[a], 1000, 2000, 0, 31);&lt;br /&gt;
    _f_data[a] += 0.5f;&lt;br /&gt;
    _data[a] = (uint16_t) _f_data[a];&lt;br /&gt;
  }&lt;br /&gt;
  for (uint8_t a = 0; a &amp;lt; _num; a ++) {&lt;br /&gt;
    _value[a] = (_data[a * 2] &amp;lt;&amp;lt; 5) + _data[a * 2 + 1];&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color: #E87E05;font-size:135%&amp;quot;&amp;gt;相关案例&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[PPM_Reference|返回PPM_Reference页面]]&lt;/div&gt;</summary>
		<author><name>Wasdpkj@hotmail.com</name></author>	</entry>

	</feed>