赞
踩
通过arduino捕获pwm信号,程序实现两个功能分别是:
1.将遥控器的输入的pwm值(占空比为5%~10%),转化输出0%~100%的pwm占空比
2.根据pwm的大小,判断输出GPIO的高低电平
1.定义必要的pwm最大值,最小值,中间值;定义两组IO用以确定pwm的方向和大小
2.初始化
3.主循环中读取direction_pin_in 引脚用以判断pwm的方向;pwm_pin_in 用以判断pwm的大小;再根据条件、公式输出即可。
芯片引脚配置函数 pinMode(chx,IN_OUT),其中chx是要配置的引脚,IN_OUT的是要配置输出还是输入,INPUT是输入,OUTPUT是输出。
PWM信号捕获函数 pulseIn(chx,polar),其中chx是要捕获的通道,polar是检测电平的高低。一般pwm信号是检测高电平。
模拟信号输出函数 analogWrite(chx,value),其中chx是pwm的输出通道,value是pwm信号的占空比值(0~255),0是百分之零,255是百分之百。
数字信号输出函数 digitalWrite(chx,polar),其中chx是数字信号的输出通道,polar是输出的电平,HIGH是高电平,LOW是低电平。
Serial.println(variable),其中variable是要输出的变量,也可以直接加上双引号“”,在双引号中输出要输出的内容。
-
- //遥控器的最大最小中间值定义
- unsigned long pwm_min = 994;
- unsigned long pwm_max = 1875;
- unsigned long pwm_mid = (pwm_min + pwm_max) /2;
- //PWM输出值,由pwm_ch3的值减去pwm_min的差,除以pwm_max -pwm_min得到
- unsigned int pwm_pulse;
-
- //PWM输入通道
- unsigned long pwm_ch3;
- unsigned long pwm_ch5;
-
- /* arduino 板子引脚旁边的编号是可以直接写在代码中,代表该引脚的 (在云端IDE环境下) */
-
- /*https://www.arduino.cc/en/Main/Software*/
-
- /*需要翻墙*/
- //方向控制pwm通道;
- int direction_pin_in = 6;
- //方向输出通道;
- int direction_out = 2;
-
- //pwm占空比输入控制通道;
- int pwm_pin_in = 7;
-
- //pwm占空比输出通道;
- int pwm_pin_out = 3;
-
- void setup() {
- // put your setup code here, to run once:
- //串口初始化,用来打印信息,方便调试
- Serial.begin(115200);
- //方向IO口初始化
- pinMode(direction_pin_in,INPUT);
- pinMode(direction_out,OUTPUT);
- //PWM占空比IO口初始化
- pinMode(pwm_pin_in,INPUT);
- pinMode(pwm_pin_out,OUTPUT);
- }
-
- void loop() {
- // put your main code here, to run repeatedly:
- pwm_ch5 = pulseIn(direction_pin_in,HIGH);
-
- if(pwm_ch5 > pwm_mid)
- {
- digitalWrite(direction_out,HIGH);
- }
- else
- {
- digitalWrite(direction_out,LOW);
- }
-
- pwm_ch3 = pulseIn(pwm_pin_in,HIGH);
- Serial.println(pwm_ch3);
- //占空比输出计算公式,将遥控器pwm占空比转化到0~255
- pwm_pulse = 255*((float)(pwm_ch3 - pwm_min)/(pwm_max-pwm_min));
- analogWrite(pwm_pin_out,pwm_pulse);
- delay(100);
- }
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。