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 的源代码
恕我直言,您的
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);