// 74hc595
#define CLK_595 13
#define CS_595 9
#define DAT_595 11
// 74hc165
#define LAT_165 8
#define CLK_165 13
#define DAT_165 12
#include <GyverShift.h>
#include <GyverShiftSPI.h>
GyverShift<OUTPUT, 2> outp(CS_595, DAT_595, CLK_595);
GyverShift<INPUT, 2> inp(LAT_165, DAT_165, CLK_165);
// GyverShiftSPI<OUTPUT, 2> outp(CS_595);
// GyverShiftSPI<INPUT, 2> inp(LAT_165);
void setup() {
  Serial.begin(115200);
  SPI.begin();
  
  // тест 595
  outp.write(0, 1);
  outp.write(1, 1);
  outp[7] = 1;
  outp[8] = 1;
  outp[14] = 1;
  outp.update();
  delay(1000);
  outp.clearAll();
  outp.update();
}
void loop() {
  // прочитать входы
  inp.update();
  if (inp.changed()) {  // если есть изменение
    for (uint16_t i = 0; i < inp.amount(); i++) {  // по кол-ву входов
      Serial.print(inp[i]);
      outp[i] = inp[i];     // передать на вход
    }
    Serial.println();
    outp.update();          // обновить входы
  }
  delay(100); // debounce
}