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

發表迴響