//Shift Register 74HC165
//シフトレジスタ74HC165の使い方
//Copyright (C) Oz@SIT all rights reserved.
//rev 0.1 2022/12/30
/*
74HC165
SH/LD 7
CLK 6
QH 8
*/
int const SL = 7; //SLを7ピンに設定
int const CLK = 6; //CLKを6ピンに設定
int const SER = 8; //SER(データQH)を8ピンに設定
int incomingData; //74HC165の入力ピンA~Hに入るデータ
int incomingDataOld; //前回のデータ
//シフトレジスタでデータを取り出す関数
//入力引数:データピン、クロックピン、ロードピン
byte myShiftIn(int dataPin, int clockPin, int loadPin) {
byte data;
digitalWrite(loadPin, LOW); //A-Hのデータを格納
digitalWrite(loadPin, HIGH); //確定
data = digitalRead(dataPin); //QHの値を読む
for (int i = 1; i < 8; i++) {
digitalWrite(clockPin, HIGH);
data = data << 1 | (digitalRead(dataPin)); //G,F,E...Aの値を読む
digitalWrite(clockPin, LOW);
}
return data;
}
void setup() {
pinMode(CLK, OUTPUT);
pinMode(SL, OUTPUT);
pinMode(SER, INPUT);
digitalWrite(SL, HIGH);
digitalWrite(CLK, LOW);
Serial.begin(9600);
Serial.println("Hello");
}
void loop() {
incomingData = myShiftIn(SER, CLK, SL);
if (incomingData != incomingDataOld) {
Serial.println(incomingData, BIN);
}
incomingDataOld = incomingData;
}