Чтение из 74HC165

@Irinka, я не большой специалист в этой микросхеме, но думаю, что заводить пин 15 на землю - очень плохая идея. Он нужен, чтобы не было ложных сдвигов.

У меня отлично работает вот такой

скетч
static constexpr uint8_t pinINH = 4;
static constexpr uint8_t pinCLK = 5;
static constexpr uint8_t pinSHLD = 6;
static constexpr uint8_t pinSO = 7;

inline void clkHIGH(void) { digitalWrite(pinCLK, HIGH); }
inline void shldLOW(void) { digitalWrite(pinSHLD, LOW); }
inline void shldHIGH(void) { digitalWrite(pinSHLD, HIGH); }
inline void inhLOW(void) { digitalWrite(pinINH, LOW); }
inline void inhHIGH(void) { digitalWrite(pinINH, HIGH); }
inline void shldTICK(void) { shldLOW(); shldHIGH(); }

uint8_t readData(void) {
   shldTICK();
   clkHIGH();
   inhLOW();
   const uint8_t result = shiftIn(pinSO, pinCLK, MSBFIRST);
   inhHIGH();
   return result;
}

void setup(void) {
   pinMode(pinINH, OUTPUT);
   inhHIGH();
   pinMode(pinCLK, OUTPUT);
   pinMode(pinSHLD, OUTPUT);
   shldHIGH();
   pinMode(pinSO, INPUT);
   
   Serial.begin(9600);
   Serial.println("Let's go on!");
}


void loop(void) {
   static uint8_t oldValue = 0;
   const uint8_t value = readData();
   if (value != oldValue) {
      Serial.print((value < 16) ? "0x0" : "0x");
      Serial.println(value, HEX);
      oldValue = value;
   }
}

При вот такой

схеме

Всё показывает, при включении/выключении того или иного тумблера адекватно новое значение выводит.

А если убрать всю работу с INH и притянуть его к земле - тут же начинает лишний бит читать, попробуйте.

1 лайк