当前位置:   article > 正文

arduino 捕获遥控器信号,并输出GPIO控制电平与PWM控制电平_arduino输出高低

arduino输出高低

主要功能:

通过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是要输出的变量,也可以直接加上双引号“”,在双引号中输出要输出的内容。

具体实现代码如下:

  1. //遥控器的最大最小中间值定义
  2. unsigned long pwm_min = 994;
  3. unsigned long pwm_max = 1875;
  4. unsigned long pwm_mid = (pwm_min + pwm_max) /2;
  5. //PWM输出值,由pwm_ch3的值减去pwm_min的差,除以pwm_max -pwm_min得到
  6. unsigned int pwm_pulse;
  7. //PWM输入通道
  8. unsigned long pwm_ch3;
  9. unsigned long pwm_ch5;
  10. /* arduino 板子引脚旁边的编号是可以直接写在代码中,代表该引脚的 (在云端IDE环境下) */
  11. /*https://www.arduino.cc/en/Main/Software*/
  12. /*需要翻墙*/
  13. //方向控制pwm通道;
  14. int direction_pin_in = 6;
  15. //方向输出通道;
  16. int direction_out = 2;
  17. //pwm占空比输入控制通道;
  18. int pwm_pin_in = 7;
  19. //pwm占空比输出通道;
  20. int pwm_pin_out = 3;
  21. void setup() {
  22.   // put your setup code here, to run once:
  23.   //串口初始化,用来打印信息,方便调试
  24.   Serial.begin(115200);
  25.   //方向IO口初始化
  26.   pinMode(direction_pin_in,INPUT);
  27.   pinMode(direction_out,OUTPUT);
  28.   //PWM占空比IO口初始化
  29.   pinMode(pwm_pin_in,INPUT);
  30.   pinMode(pwm_pin_out,OUTPUT);
  31. }
  32. void loop() {
  33.   // put your main code here, to run repeatedly:
  34.   pwm_ch5 = pulseIn(direction_pin_in,HIGH);
  35.  
  36.   if(pwm_ch5 > pwm_mid)
  37.   {
  38.       digitalWrite(direction_out,HIGH);
  39.   }
  40.    else
  41.    {
  42.     digitalWrite(direction_out,LOW);
  43.    }
  44.   pwm_ch3 = pulseIn(pwm_pin_in,HIGH);
  45.   Serial.println(pwm_ch3);
  46.   //占空比输出计算公式,将遥控器pwm占空比转化到0~255
  47.   pwm_pulse = 255*((float)(pwm_ch3 - pwm_min)/(pwm_max-pwm_min));
  48.   analogWrite(pwm_pin_out,pwm_pulse);
  49.   delay(100);
  50. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/1013055
推荐阅读
相关标签
  

闽ICP备14008679号