RaspberryPi -74HC595 三支腳位控制8 顆LED

74HC595是一個IC晶片,使用三個針腳就可以控制8Bit訊號輸出,最大支援到15顆晶片串接,詳細介紹可以參考IO 擴充應用 – 使用 74HC595 (三態輸出八位元移位暫存器 IC)

WiringPi是一個raspberry pi很常見的GPIO控制程式庫,可經由GPIO針腳來控制設備及零件,此程式庫是由C語言撰寫而已,Java要使用則需要使用JNI來與程式庫做互動。

目前Java有一套Pi4J程式庫可以直接與WiringPi做互動來控制GPIO。更詳細的介紹可以參考Java Embedded(1)從 Raspberry Pi 開始會有一整申相關教學。

這裡是一個範例,利用三個GPIO針腳來控制8個LED燈。

GPIO控制74CH595

程式範例

我使用的針腳

SHCP=>GPIO 25

STCP=>GPIO24

DS=>GPIO23

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mygpio;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

/**
 *
 * @author Eric
 */
public class IC74HC595 {

    public static void main(String args[]) {
        final GpioController gpio = GpioFactory.getInstance();
        System.out.println("start IC");
        // 建立控制GPIO_01輸入的物件,紅外線測距模組的輸出針腳
        final GpioPinDigitalOutput ds
                = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23,
                        PinState.LOW);
        final GpioPinDigitalOutput stcp
                = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_24,
                        PinState.LOW);
        final GpioPinDigitalOutput shcp
                = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_25,
                        PinState.LOW);
        System.out.println("init ");
        int delayTime = 500;
        //while(true)
        {

            for (int i = 0; i < 256; i++) {
                stcp.setState(PinState.LOW);
                //System.out.println((byte)(i>> 8)+";"+(((byte)i))+";"+i);
                //if(i>256)
                //com.pi4j.wiringpi.Shift.shiftOut((byte)ds.getPin().getAddress(), (byte)shcp.getPin().getAddress(), (byte)com.pi4j.wiringpi.Shift.MSBFIRST, (byte)(i>> 8));
                com.pi4j.wiringpi.Shift.shiftOut((byte) ds.getPin().getAddress(), (byte) shcp.getPin().getAddress(), (byte) com.pi4j.wiringpi.Shift.MSBFIRST, (byte) i);

                stcp.setState(PinState.HIGH);
                delay(delayTime);
            }

        }
    }

    private static void delay(int ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            System.out.println(e.toString());
        }
    }
}

GPIO控制74CH595-2 GPIO控制74CH595-3

API參考資料

com.pi4j.wiringpi Class Shift

參考資料

Arduino 筆記 – Lab11 使用 74HC595 和三支腳位控制 8 顆 LED

Shift Register: 74×595

[Arduino] 74HC595N Shift Register 介紹 – 1

發表迴響