用Arduino采集5路pwm信号,然后在输出,该怎么做?求大侠指点!!

intCH1=0;intCH2=1;intCH3=2;intCH4=4;intCH5=6;voidsetup(){Serial.begin(9600);//串口波特率为9... int CH1 = 0;
int CH2 = 1;
int CH3 = 2;
int CH4 = 4;
int CH5 = 6;
void setup()
{
Serial.begin(9600); //串口波特率为9600
pinMode(0, INPUT); //设置引脚为输入模式
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(6, INPUT);
}
void loop()
{
CH1 = analogRead (0);//pulseIn(0, HIGH,6000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
CH2 = analogRead (1);//pulseIn(0, HIGH,6000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
CH3 = analogRead (2);//pulseIn(0, HIGH,6000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
CH4 = analogRead (4);//pulseIn(0, HIGH,6000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
CH5 = analogRead (6);//pulseIn(0, HIGH,6000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
// CH2 = pulseIn(1, HIGH,6000000);
// CH3 = pulseIn(2, HIGH,6000000);
// CH4 = pulseIn(4, HIGH,6000000);
// CH5 = pulseIn(6, HIGH,6000000);

Serial.println("CH1");
Serial.println(CH1);
Serial.println("CH2");
Serial.println(CH2);
Serial.println("CH3");
Serial.println(CH3);
Serial.println("CH4");
Serial.println(CH4);
Serial.println("CH5");
Serial.println(CH5);
//通过串口输出duration

}
我写的采集程序 奇慢无比!求指点!!
展开
 我来答
wupingjun315
2014-07-18 · TA获得超过339个赞
知道小有建树答主
回答量:103
采纳率:100%
帮助的人:97.5万
展开全部
//定义通道
#define CH1 0
#define CH2 1
#define CH3 2
#define CH4 4
#define CH5 6

unsigned long P[6]; //定义PWM值存储数组
unsigned long T[6]; //定义临时时间存储数组
bool L[6];  //定义状态存储数组

void setup() 
{
  int i;
  Serial.begin(9600); //初始化串口
  pinMode(CH1, INPUT);  //设置管脚输入状态
  pinMode(CH2, INPUT);
  pinMode(CH3, INPUT);
  pinMode(CH4, INPUT);
  pinMode(CH5, INPUT);
  
  for(i=1;i<=5;i++)
  {
    P[i] = 0; //初始化PWM值为0
    T[i] = 0; //初始化临时时间值为0
    L[i] = false; //初始化状态为假
  }
}

void loop() 
{
  int i;
  CHK_PWM_TIME(CH1,1); //判断并采集各个通道
  CHK_PWM_TIME(CH2,2);
  CHK_PWM_TIME(CH3,3);
  CHK_PWM_TIME(CH4,4);
  CHK_PWM_TIME(CH5,5);
  
  for(i=1;i<=5;i++) //输出采集结果
  {
    Serial.print(P[i]);
    Serial.print(",");
  }
  Serial.println(" CH1,...,CH5");
}

void CHK_PWM_TIME(int Pin , int CH) //通道脉宽采集函数
{
  int puls; //电平高低状态
  puls = digitalRead(Pin); //读Pin电平高低状态
  if (puls == HIGH && L[CH] == false) //如果高电平,但状态为假 则
  {
    T[CH] = micros(); //记录临时时间
    L[CH] = true;     //标记状态为真
  }
  else if (puls == LOW && L[CH] == true) //如果电平为低,但状态为真 则
  {
    P[CH] = micros() - T[CH]; //脉冲捕捉结束,脉宽值为当前时间 - 记录时间
    L[CH] = false;  // 标记记录状态为假
  }
}

 以上在Arduino IDE环境中调试无错,具体的运行效果,要根据您的具体的硬件连接来调试。

建议不要使用数字管脚的0和1,有一些Arduino的板子,数字管脚的0和1可能与串口是复用的,在输入数据,同时还要进行串口通信的时候,有可能会干扰您的采集准确或导致无法串口通信。

意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式