主要功能:
通过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);
}