库中的示例 Pi4j 无法正常工作

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

我使用 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 灯不亮?

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

您可以尝试在设置第一个 LED 的颜色后添加延迟,以确保在调用 render 方法之前它有足够的时间完全点亮。您也可以尝试将第一个 LED 换成另一个,看看问题是否仍然存在。最后,您可能需要检查 Pi4j 库、LibGDX 框架和您使用的 Java 版本之间是否存在任何硬件或软件兼容性问题。

© www.soinside.com 2019 - 2024. All rights reserved.