使用 Raspberry Pi 3B 和 Pi4J 库的可寻址 LED 灯条控制

问题描述 投票:0回答:1

GPIO 和 Raspberry Pi 3 的高手。我需要你的建议。

我正在为一家公司制作街机柜。在这个项目中,我使用 Pi4j 库进行 GPIO 交互。 我使用官方仓库中的示例来控制 LED 灯条。 LED 灯带包含 10 个 LED。 我写了一个从控制台读取两位数字的代码。第一个是第一个 LED 的编号,必须打开。第二个数字是必须打开的最后一个 LED 的编号。第一个和第二个之间的 LED 必须打开。颜色只有白色。 我无法在家测试我的代码。我将项目发送给客户进行测试。 他把结果发给我:

他输入数字 12,数字 8 和 9 的 LED(数字 0 是第一个 LED,9 是最后一个)被打开。然后他输入 16,所有 LED 都亮了。我添加了实验视频。请看:Video_test

您有使用 Raspberry Pi 控制 LED 灯条的经验吗?有什么问题?我忘记了什么重要的事情吗?客户试过用3,3V <-> 5V电压转换器给PI的MOSI脚,但情况是一样的。

我的密码是:

public class LedChainManager extends Manager{
    private GpioManager gpioManager;
    private LedStrip ledStrip;
    private final int leds = 10;
    protected int parameter1, parameter2;


    public LedChainManager(GpioManager gpioManager) {
        this.gpioManager = gpioManager;
        init();
    }

    private void init() {
        ledStrip = new LedStrip(gpioManager.getPi4j(), leds, 1);
    }

    public void execute() {
        System.out.println("LED colors changing started");
        long startTime = System.currentTimeMillis();
        ledStrip.allOff();
        ledStrip.setStripColor(PixelColor.WHITE);
        ledStrip.render();
        delay(20);        
        if (parameter1 <= parameter2){
            if (parameter1>=0 && parameter2<=9){
                for (int i = parameter1; i <= parameter2; i++){
                    ledStrip.setPixelColor(i, PixelColor.WHITE);
                    ledStrip.render();
                    delay(20);
                }
            }
        }
        System.out.println("LED strip colors were changed in " + (System.currentTimeMillis()-startTime) + " milliseconds");
    }


    public void dispose(){
        ledStrip.close();
    }

    public void setParameter1(int parameter1) {
        this.parameter1 = parameter1;
    }

    public void setParameter2(int parameter2) {
        this.parameter2 = parameter2;
    }

}

LED灯条类是模板类。它可以在 github 上找到:LED_strip 的源代码

raspberry-pi gpio spi pi4j
1个回答
0
投票

恕我直言,您的

execute()
方法是错误的。

关闭所有 LED 后 (

ledStrip.allOff()
),您立即再次打开它们 (
ledStrip.setStripColor(PixelColor.WHITE);
):

    public void execute() {
        System.out.println("LED colors changing started");
        long startTime = System.currentTimeMillis();
        ledStrip.allOff();
        ledStrip.setStripColor(PixelColor.WHITE); // ?! do you really want to turn on all pixels?
        ledStrip.render();
        delay(20);        
        if (parameter1 <= parameter2){
            if (parameter1>=0 && parameter2<=9){
                for (int i = parameter1; i <= parameter2; i++){
                    ledStrip.setPixelColor(i, PixelColor.WHITE);
                    ledStrip.render();
                    delay(20);
                }
            }
        }
        System.out.println("LED strip colors were changed in " + (System.currentTimeMillis()-startTime) + " milliseconds");
    }

要验证这一点,您可以将该行更改为

        ledStrip.setStripColor(PixelColor.RED);
© www.soinside.com 2019 - 2024. All rights reserved.