本文介绍了树莓派的gpio引脚输出pwm波用以控制led灯亮度的方法,使用的是基于树莓派官方系统中自带的wiringPi库函数实现的。
树莓派中输出pwm波有两种方式:一种是硬件pwm波,一种是软件模拟的pwm波。软件模拟的pwm可以自定义pwm的周期。
1.wiringPi函数接口模拟pwm
1.1代码源码
#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h>
#include <unistd.h>
#include <stdlib.h>
#define BACK_LIGHT (17)
int main(int argc, char *argv[])
{
if(-1 == wiringPiSetup()){
printf("wirong pi init fail\n");
return -1;
}
int i=0;
softPwmCreate(BACK_LIGHT, 0, 100);// 生成一个初始值为0,周期为10ms的pwm控制引脚17(周期=0.1*第三个参数)
if(1 == argc){
for(i = 0; i < 100; i++)
{
softPwmWrite(BACK_LIGHT, i);
//usleep(5000);
sleep(1);
}
}
else{
i = atoi(argv[1]);
printf("i = %d\n", i);
softPwmWrite(BACK_LIGHT, i);
sleep(4);
printf("end\n");
}
return 0;
}
1.2代码的编译方式
sudo gcc gpio_pwm.c -lpthread -lwiringPi
1.3执行
sudo ./a.out