arduino 捕獲遙控器信號,並輸出GPIO控制電平與PWM控制電平

主要思路:

通過arduino捕獲pwm信號,程序實現兩個功能,思路分別是:

1.將遙控器的輸入的pwm值,轉化輸出百分之零到百分之百的pwm佔空比

2.根據pwm的大小,判斷輸出GPIO的高低電平

 主要用到:

芯片引腳配置函數  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;


//方向控制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)/880);
  analogWrite(pwm_pin_out,pwm_pulse);
  delay(100);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章