Já pensaste na solução do port extender??
Tipo o MCP23017?
Queres mostrar o teu esquema para vermos se não existe possibilidade de melhorar essas lilgações?
´
//no inciio do ficheiro...
#define SET_BIT(p,n) ((p) |= (1 << (n)))
#define CLR_BIT(p,n) ((p) &= (~(1) << (n)))
//No setup...
pinMode(latchPin, OUTPUT);
//no ficheiro de código...
void ShiftUpdate(unsigned char data) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, data);
digitalWrite(latchPin, 1);
}
//no loop
for (unsigned char i = 0; i < 2; i++) {
SET_BIT (dataOut, 2);
ShiftUpdate(dataOut);
delay(100);
CLR_BIT(dataOut, 2);
ShiftUpdate(dataOut);
delay(100);
}
Sempre que usas um delay estragas a performance do programa... logo não vale a pena sequer comentar o resto.