Каскад сдвиговых регистров

Andrei_Golikov
Offline
Зарегистрирован: 21.04.2018

Всем доброго времени суток. 

Работаю с ардуино уно, возникла необходимость подключить 14 светодиодов, 14 кнопок и ещё некоторые модули. Соответственно, столкнулся с нехваткой пинов и подключил сдвиговый регистр. Если прописывать код такого вида:

digitalWrite(latch, LOW);
shiftOut(data, clock, LSBFIRST, value);
digitalWrite(latch, HIGH);

то программа получится очень громоздкой. Нашел такую функцию:

void sendpin(int pin, boolean state){
  pin--;
  states[pin]=state;
   
  byte value = 0;
  byte add = 1;
  for(int i=0; i<8; i++){
    if(states[i]==HIGH) value+=add;
    add*=2;
  }
  digitalWrite(latch, LOW);
  shiftOut(data, clock, LSBFIRST, value);
  digitalWrite(latch, HIGH);
}

тогда вместо трех строк нужно писать только:

sendpin(2, HIGH);

с одним регистром работает на ура, наигрался вдоволь со светодиодами.

Дак вот вопрос: как переписать эту функцию, чтобы была возможность использовать ее с каскадом сдвиговых регистров???

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Я бы сказал что надо написать библиотеку , или как минимум класс. Но может оказаться, что будет это #7