我使用 Pi4j 和 LibGDX 创建了一个 Java 项目。我在我的项目中集成了Pi4j项目官方主页的简单示例。我只将 LED 的数量从 4 个更改为 10 个,并使用带有 10 个 LED 的 LED 灯条 (ws2811) 测试了程序。运行时是 Java 17 (Liberica JDK)。但是第一个 LED 不亮。完整代码如下:
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
System.out.println("LED strip app started ...");
int pixels = 10;
Context pi4j;
final var piGpio = PiGpio.newNativeInstance();
pi4j = Pi4J.newContextBuilder()
.noAutoDetect()
.add(new RaspberryPiPlatform() {
@Override
protected String[] getProviders() {
return new String[]{};
}
})
.add(PiGpioDigitalInputProvider.newInstance(piGpio),
PiGpioDigitalOutputProvider.newInstance(piGpio),
PiGpioPwmProvider.newInstance(piGpio),
PiGpioSerialProvider.newInstance(piGpio),
PiGpioSpiProvider.newInstance(piGpio)
//LinuxFsI2CProvider.newInstance()
)
.build();
final LedStrip ledStrip = new LedStrip(pi4j, pixels, 0.5);
//set them all off, so nothing is shining
System.out.println("Starting with setting all leds off");
ledStrip.allOff();
System.out.println("setting the LEDs to RED");
ledStrip.setStripColor(PixelColor.RED);
ledStrip.render();
delay(3000);
System.out.println("setting the LEDs to Light Blue");
ledStrip.setStripColor(PixelColor.LIGHT_BLUE);
ledStrip.render();
delay(3000);
System.out.println("setting the first led to Purple");
ledStrip.setPixelColor(0, PixelColor.PURPLE);
ledStrip.render();
delay(3000);
System.out.println("setting the brightness to full and just show the first led as White");
ledStrip.allOff();
ledStrip.setBrightness(1);
ledStrip.setPixelColor(0, PixelColor.WHITE);
ledStrip.render();
delay(3000);
//finishing and closing
ledStrip.close();
System.out.println("closing the app");
System.out.println("Color "+ ledStrip.getPixelColor(0));
System.out.println("LED strip app done.");
}
@Override
public void render () {
ScreenUtils.clear(0, 0, 0, 1);
batch.begin();
//batch.draw(img, 0, 0);
batch.end();
}
@Override
public void dispose () {
batch.dispose();
img.dispose();
}
private static void delay(int milliseconds){
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
为什么第一个 LED 灯不亮?
您可以尝试在设置第一个 LED 的颜色后添加延迟,以确保在调用 render 方法之前它有足够的时间完全点亮。您也可以尝试将第一个 LED 换成另一个,看看问题是否仍然存在。最后,您可能需要检查 Pi4j 库、LibGDX 框架和您使用的 Java 版本之间是否存在任何硬件或软件兼容性问题。