Wiringpi SDK

      在〈Wiringpi SDK〉中尚無留言

Pi4j & Wiringpi

Raspberry for Java 的Pi4j寫法, 皆以com.pi4j.io.* 為主, 一開始需使用
GpioController gpio=GpioFactory.getInstance(); 然後再由gpio.provisionDigitalOutputPin()取得每支針腳的物件, 再進行控制

wiringpi SDK的寫法, 顯個更為精簡, 而且是更加的精確了

1.  Gpio.wiringPiSetup()

初始化所有的GPIO針腳

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

2.  Gpio.pinMode(Pin, Gpio.OUTPUT)

設定針腳的輸入/輸出 模式

        Gpio.pinMode(5, Gpio.INPUT);
        Gpio.pinMode(6, Gpio.OUTPUT);

3. GpioInterrupt.enablePinStateChangeCallback(PIN_NUMBER);

允許某支針腳觸發後, 進行回調作業

4. GpioInterrupt.disablePinStateChangeCallback(PIN_NUMBER)

禁止針腳的回調作業,

5. GpioInterrupt.addListener 設定回調作業

上述 enablePinStateChangeCallback後, 需產生GpioInterruptListener物件, 再將要運作的任務寫在裏面即可.

GpioInterrupt.addListener(new GpioInterruptListener() {
    @Override
    public void pinStateChange(GpioInterruptEvent event) {
        System.out.println("Raspberry Pi PIN [" + event.getPin() +"] is in STATE [" + event.getState() + "]");
        switch(event.getPin()){
            case 7:
                Gpio.digitalWrite(6, event.getStateValue());
                break;
            case 0:
                Gpio.digitalWrite(5, event.getStateValue());
                break;
        }
    });

GpioInterruptListener 為一介面, 而且是SAM(Single Abstract Method), 裏面只有
abstract public void pinStateChange(GpioInterruptEvent event) 抽象方法
所以可以改成Lambda的語法

GpioInterrupt.addListener((event)->{
    System.out.printf("PIN %s is in State %s",event.getPin(), event.getState());
    switch(event.getPin()){
        case 0:
            closeFlag=true;
            System.out.println("Game over");
        break;
        case 1:
            break;
    }
}); 

速度

使用不同的語言, 執行的速度也不同, 網路上有人寫了一個無窮迴圈, 迴圈只進行LED的點亮與關閉, 測得的數據如下

語言 速度
C 13.9MHZ
wiringpi Java 2.4MHZ
Pi4j Java 1.65MHZ
Python 321.6KHZ
Shell 192.2HZ

由上表即可知, 使用Python是件很白痴的事

發佈留言