主要思路:
通過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);
}