主页 > 编程资料 > Arduino >
发布时间:2017-10-24 作者:网络 阅读:282次
//定义通道
#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;  // 标记记录状态为假
}
}


关键字词: