模型论坛|模型中国

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 694|回复: 2

Arduino单中断监测遥控器PPM信号

[复制链接]
发表于 2017-9-8 12:53:40 | 显示全部楼层 |阅读模式
利用Arduino UNO将遥控器发出的PPM脉冲序列转换成数据串口输出。
试验,免得拆机,用教练口的线连接到单片机2口上,如图
下载好程序,打开Arduino的串口绘图器,几个通道动作如下


这个方法很方便将PPM信号由独立的一个单片机中断口解析出来!
下面代码:
  1. unsigned long flagT = 0;  //时间标记
  2. int chN = 0;   //通道标志号
  3. int chV[6];   //6通道信号存放
  4. bool gg = false;  //通道信号接收完成标志位

  5. void calculate();

  6. void setup() {
  7.   Serial.begin(9600);
  8.   attachInterrupt(0,calculate,RISING); //UNO工作在0号中断2脚上升沿检测
  9. }

  10. void loop() {
  11.   
  12.   if(gg == true)
  13.   {
  14.   for(int i =0;i<6;i++)
  15.   {
  16.      Serial.print(chV[i]);
  17.      Serial.print(" ");
  18.     }
  19.     gg = false;
  20.     Serial.println("");
  21.   }
  22.   delay(5);

  23. }

  24. void calculate()
  25. {
  26.   if(flagT == 0 && chN == 0) //第一通道信号初次进入
  27.   {
  28.     flagT = micros();
  29.     }
  30.    else if(chN < 5)   //第2,3,4通道信号存放
  31.    {
  32.      chV[chN] =  micros() - flagT;
  33.      chN++;
  34.      flagT = micros();
  35.      }
  36.     else if(chN == 5)   //第5通道信号存放并进行相关复位
  37.     {
  38.       chV[chN] =  micros() - flagT;
  39.       chN = 0;
  40.       flagT = 0;
  41.       gg = true;
  42.       }
  43.       else     //滤除干扰
  44.       {
  45.         chN = 0;
  46.       flagT = 0;
  47.         }
  48.   }
复制代码


1.png
2.png
发表于 2017-9-8 14:19:20 | 显示全部楼层
行家里手!赞!
回复 支持 反对

使用道具 举报

发表于 2017-9-8 21:27:16 | 显示全部楼层
干的好,不错!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|     repair

GMT+8, 2018-5-21 11:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表