2017-08-16 52 views
-3

我是一位老Java程序員,將代碼從Desktop轉換爲Raspberry Pi,目的是將軟件嵌入到硬件接口中。Raspberry Pi Java Pi4j gpio不適用於我,與python一起工作雖然

我有線一個16 * 2字符LCD顯示,其與Python代碼的工作,但是,當我使用pi4j庫通過Java訪問GPIO,屏幕爲空白。

我錯過了一些二進制開關?

我運行pi4j 1.2,上A +裨,得到了在受影響佈線裨1.1處理器錯誤。

感謝您的閱讀,任何建議表示讚賞。

import com.pi4j.component.lcd.LCDTextAlignment; 
import com.pi4j.component.lcd.impl.GpioLcdDisplay; 
import com.pi4j.io.gpio.GpioController; 
import com.pi4j.io.gpio.GpioFactory; 
import com.pi4j.io.gpio.RaspiPin; 
import com.pi4j.system.NetworkInfo; 

public class LCD { 

    public static void main(String args[]) { 
     System.out.println("SYSTEM PRINT TEST"); 
     GpioController gpio = GpioFactory.getInstance(); 
     GpioLcdDisplay lcd = new GpioLcdDisplay(2,16, 
      RaspiPin.GPIO_26, 
      RaspiPin.GPIO_31, 
      RaspiPin.GPIO_15, 
      RaspiPin.GPIO_16, 
      RaspiPin.GPIO_01, 
      RaspiPin.GPIO_04); 

     lcd.clear(); 
     Thread.sleep(1000); 

     lcd.write(0, "LINE 1 TEST"); 
     lcd.write(1, "LINE 2 TEST"); 

     Thread.sleep(2000); 
     gpio.shutdown(); 
    } 
} 
+0

你怎麼知道java代碼的作品?運行python程序會顯示python庫和硬件連接正常工作,但是這並不能告訴我爲什麼java代碼不工作。 – DevelopingDeveloper

+0

你也可以在[Raspberry Pi StackExchange](https://raspberrypi.stackexchange.com/)上試試。 – Zabuza

+0

[爲什麼「有人可以幫我嗎?」不是一個真正的問題?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

回答

0

這個術語編碼上的針編號與原始底層佈線編號之間的差異是造成這種挫折的原因。這是修改後的代碼,其中gpio 25對應於wiringPi 6,而不是26!請記得將wiringPi和pi4j更新到最新版本。

import com.pi4j.wiringpi.Gpio; 
import com.pi4j.wiringpi.Lcd; 

public class LCD { 

    public final static int LCD_ROWS = 2; 
    public final static int LCD_COLUMNS = 16; 
    public final static int LCD_BITS = 4; 

    public static void main(String args[]) { 

     System.out.println("SYSTEM PRINT TEST"); 

     if (Gpio.wiringPiSetup() == -1) { 
      System.out.println("GPIO SETUP ERROR"); 
      return; 
     } 

     int lcdHandle= Lcd.lcdInit(LCD_ROWS, 
            LCD_COLUMNS, 
            LCD_BITS, 
            6, 
            5, 
            15, 
            16, 
            1, 
            4, 
            0, 
            0, 
            0, 
            0); 

     if (lcdHandle == -1) { 
      System.out.println("LCD INIT ERROR"); 
      return; 
     } 

     Lcd.lcdDisplay(lcdHandle,1); 
     Lcd.lcdClear(lcdHandle); 

     Lcd.lcdPuts (lcdHandle, "LCD TEST LINE 1") ; 

     Lcd.lcdPosition (lcdHandle, 0, 1) ; 
     Lcd.lcdPuts (lcdHandle, "LCD TEST LINE 2") ; 

try { 
    Thread.sleep(10000); 
    } catch (Exception e) {} 
    Lcd.lcdDisplay(lcdHandle,0); 

    } 
}