Sorry, esqueci de dizer que os 'botões' são 3 botões no pino 1 usando essa técnica, no entanto para garantir que não há qualquer erro meti um botão à parte uma vez que tenho pinos analógicos que cheguem para o fazer.
Quanto ao Shift Register tenho tudo a funcionar, mal ou bem não sei, mas tenho desta forma e consigo ligar\desligar o que quero:
Início:
int latchPin = 2; //74HC595 pino 12
int clockPin = 3; //74HC595 pino 11
int dataPin = 1; //74HC595 pino 14
int OEpin = 9; //74HC595 pino 13
int Equipamentos[8];
byte dataOut = 0;
No setup:
pinMode(OEpin, OUTPUT);
digitalWrite(OEpin, LOW);
pinMode(latchPin, OUTPUT);
//Tudo OFF:
Equipamentos[0] = 0 //Q0
Equipamentos[1] = 0; //Q1
Equipamentos[2] = 0; //Q2
Equipamentos[3] = 0; //Q3
Equipamentos[4] = 0; //Q4
Equipamentos[5] = 0; //Q5
Equipamentos[6] = 0; //Q6
Equipamentos[7] = 0; //Q7
for (int i = 7; i >= 0; i--) {
bitWrite(dataOut, i, Equipamentos[i]);
}
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataOut);
digitalWrite(latchPin, 1);
Quando quero alterar por exemplo o dispositivo 2 (Equipamentos[2]) faço isto:
Equipamentos[2]= 0 // ou 1 depende do estado que quero alterar
for (int i = 7; i >= 0; i--) {
bitWrite(dataOut, i, Equipamentos[i]);
}
pinMode(latchPin, OUTPUT);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataOut);
digitalWrite(latchPin, 1);
Faço mal?