#include <RoxMux.h>
#include <ShiftOutMega.h>
// MUX_TOTAL is the number of 74HC165s that you have chained together
// if you have more than 1 then change it to that number.
#define MUX_TOTAL 2
Rox74HC165 <MUX_TOTAL> mux;
/////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////
/*#define ARRAY_SIZE 8
#define LAST_SELECTED_LED_EEPROM_ADDR 6
int ledPinArray[8] = { LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8};
*/
/////////////////////////////////////////////////////////////////////
// pins for 74HC165
#define PIN_DATA  23 // pin 9 on 74HC165 (DATA)
#define PIN_LOAD  22 // pin 1 on 74HC165 (LOAD)
#define PIN_CLK   21 // pin 2 on 74HC165 (CLK))
// keep track of the previous state of the pins
// each element of the array holds the state of 8 pins, 1 per bit
bool pinState[MUX_TOTAL*8];
/////////////////////////////////////////////////////////////////////
//Variáveis de uso dos registradores 74HC595
#define latchPin  33  //Pino 8 conectado ao pino 12 do 74HC595 (Latch)(STCP).
#define dataPin  25  //Pino 11 conectado ao pino 14 do 74HC595 (Data)(DS).
#define clockPin  32 //Pino 12 conectado ao pino 11 do 74HC595 (Clock)(SHCP).
//Quantidade de registradores (74HC595). Para cada registrador, mais 8 saídas.
int qtdRegistradores = 16;
ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores); //Inicia a biblioteca passando os parametros de uso.
////////////////////////////////////////////////////////////////////
//Variáveis de uso dos registradores 74HC595a
#define latchPina  12  //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
#define dataPina  13  //Pino 11 conectado ao pino 14 do 74HC595 (Data).
#define clockPina  14 //Pino 12 conectado ao pino 11 do 74HC595 (Clock).
//Quantidade de registradores (74HC595). Para cada registrador, mais 8 saídas.
int qtdRegistradoresa = 8;
ShiftOutMega megaa(latchPina, dataPina, clockPina, qtdRegistradoresa); //Inicia a biblioteca passando os parametros de uso.
////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////
void setup(){
  mux.begin(PIN_DATA, PIN_LOAD, PIN_CLK);  
  Serial.begin(115200);
  
}
  ////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
void loop(){
  // read the mux
  mux.update();
  for(uint16_t i=0, n=mux.getLength(); i < n ; i++){
   mux.read(i); 
               if(mux.read(i) == 1){
                mega.shiftWrite(i+1, HIGH);
                delay(5000);
                megaa.shiftWrite(i+1, HIGH);
                megaa.shiftWrite(i+1, LOW);
                Serial.print("Pin ");
                Serial.print(i);
                Serial.print(": ");
                Serial.print(mux.read(i));
                Serial.println(": on.");
               } else if(mux.read(i) == 0){
              mega.shiftWrite(i+1, LOW);
              Serial.print("Pin ");
              Serial.print(i);
              Serial.print(": ");
              Serial.print(mux.read(i));
              Serial.println(": off.");
              }
              delay(50);
                
  }
}
74HC165
74HC595
74HC595
74HC165
74HC595