原文: https://javatutorial.net/raspberry-pi-dim-led-pwm-java

    在本教程中,我将向您展示如何使用 PWM 控制电压以使 LED 变暗。

    打开和关闭 LED 很容易。 您可以在我的上一教程中了解如何执行此操作。 现在,我将向您展示如何控制电压电平以使 LED 灯变弱或变强。 通常,Raspberry GPIO 使用 3.3 的电压。 当该引脚处于上升状态时,输出电压等于 3.3,而当该引脚处于下降状态时,电压为 0。那么如何将电压更改为例如 3.3V 的 50% ? 我们可以使用脉宽调制(PWM)进行此操作。根据 Wikipedia,PWM 是:“一种用于将消息编码为脉冲信号的技术。 尽管这种调制技术可用于编码信息以进行传输,但其主要用途是允许控制提供给电气设备,尤其是惯性负载(如电机)的功率。

    在 Raspberry Pi 中,只有一个引脚支持硬件 PWM。 硬件 PWN 引脚产生非常干净的信号。 虽然您可以制作一个软件 PWM,但所有引脚都可以产生 PWM。 软件的 PWM 引脚没有如此清晰的信号,您必须自行设定时序。

    我们将使用与先前教程中完全相同的电路。 看下图

    使用 PWM 的 Raspberry Pi LED 亮度调节 - 图1

    以下代码示例将使 LED 逐渐变亮,然后完全熄灭 3 次。 我将 Pi4j API 用于 Java 绑定。 如果您想知道如何使用 Pi4j 安装,配置和运行项目,请参阅我的上一教程

    1. import com.pi4j.wiringpi.Gpio;
    2. import com.pi4j.wiringpi.SoftPwm;
    3. public class DimLEDPWM {
    4. private static int PIN_NUMBER = 1;
    5. public static void main(String[] args) throws InterruptedException {
    6. // initialize wiringPi library, this is needed for PWM
    7. Gpio.wiringPiSetup();
    8. // softPwmCreate(int pin, int value, int range)
    9. // the range is set like (min=0 ; max=100)
    10. SoftPwm.softPwmCreate(PIN_NUMBER, 0, 100);
    11. int counter = 0;
    12. while (counter < 3) {
    13. // fade LED to fully ON
    14. for (int i = 0; i <= 100; i++) {
    15. // softPwmWrite(int pin, int value)
    16. // This updates the PWM value on the given pin. The value is
    17. // checked to be in-range and pins
    18. // that haven't previously been initialized via softPwmCreate
    19. // will be silently ignored.
    20. SoftPwm.softPwmWrite(PIN_NUMBER, i);
    21. Thread.sleep(25);
    22. }
    23. // fade LED to fully OFF
    24. for (int i = 100; i >= 0; i--) {
    25. SoftPwm.softPwmWrite(PIN_NUMBER, i);
    26. Thread.sleep(25);
    27. }
    28. counter++;
    29. }
    30. }
    31. }

    您可以使用以下命令在 Raspberry 上运行该程序:

    1. sudo java -classpath .:classes:/opt/pi4j/lib/'*' DimLEDPWM