
loop()
{
digitalWrite(13,HIGH)
delay(500)
digitalWrite(13,LOW)
delay(500)
}
以上这段程序输出的就是1Hz的波形,把洞启两个500都改成50,这样输出的就是10Hz的。
解释:数字表示多少毫秒,要什么样频差悔率就自己算一下周期改进去就好虚颤正了。
//定义通道#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
pinMode(CH1, INPUT) //设置管脚输入状态
pinMode(CH2, INPUT)
pinMode(CH3, INPUT)
pinMode(CH4, INPUT)
pinMode(CH5, INPUT)
for(i=1i<=5i++)
{
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=1i<=5i++) //输出采集结果
{
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可能与串口是复用的,在输入数据,同时还要进行串口通信的时候,有可能会干扰您的采集准确或导致无法串口通信。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)