//定义通道 #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; // 标记记录状态为假 } }
关键字词: