const int inputLatchPin = 7; // Пин защелки входной микросхемы 74HC165
const int inputClockPin = 6; // Пин управляющего clock микросхемы
const int inputDataPin = 5; // Пин для передачи данных от кнопок
const int inputPIN_CE = 8;
const int outputLatchPin = 4; // Пин защелки выходной микросхемы 74HC595
const int outputClockPin = 3; // Пин управляющего clock микросхемы
const int outputDataPin = 2;// Пин для передачи данных на микросхему 74HC595
uint8_t mk_C = 0, dataIn = 0;
uint8_t mk = 0b00000000;
void setup()
{
Serial.begin(9600);
// инициализация пинов как выходы
pinMode(outputLatchPin, OUTPUT);
pinMode(outputDataPin, OUTPUT);
pinMode(outputClockPin, OUTPUT);
// инициализация пинов как входы
pinMode(inputClockPin, OUTPUT);
pinMode(inputLatchPin, OUTPUT);
pinMode(inputPIN_CE, OUTPUT);
// инициализация пина как вход
pinMode(inputDataPin, INPUT);
// digitalWrite(inputLatchPin, 1);
// digitalWrite(inputClockPin, 0);
}
void data_In() // Подпрограмма для чтения одной 74HC165
{
mk_C = 0;
mk = 0;
do { // Бесконечный цыкл пока (mk_C < 8).
mk = mk << 1; // Сдвинуть на один бит в лево.
mk = mk + digitalRead(inputDataPin); // Прочесть и записать один бит.
digitalWrite(inputClockPin, 1); // Переключить один бит.
delay(1);
digitalWrite(inputClockPin, 0); // Подготовить для переключения одного бита.
delay(1);
mk_C ++;
}
while (mk_C < 8); // Выполняем до тех пор пока CLK меньше 8 тактов.
}
void loop()
{
Serial.println(mk);
// Считываем данные из 74HC165
digitalWrite(inputLatchPin, 0); // Прочесть и зиблокировать CLK всех 74HC165. Вывести 1-й бит.
digitalWrite(inputLatchPin, 1); // Снятие блокировки CLK.
digitalWrite(outputLatchPin, LOW);
digitalWrite(inputPIN_CE, LOW);
data_In(); // Прочитать первую 74HC165.
shiftOut(outputDataPin, outputClockPin, MSBFIRST, mk);
data_In(); // Прочитать первую 74HC165.
shiftOut(outputDataPin, outputClockPin, MSBFIRST, mk);
digitalWrite(outputLatchPin, HIGH);
}