// Pines para 74HC165 (Paralelo a Serie)
const int pinLoad = 13; // PL
const int pinClock = 12; // CLK
const int pinData = 11; // QH (datos serie)
// Pines para 74HC595 (Serie a Paralelo)
const int pinLatch = 8; // RCLK
const int pinShift = 7; // SRCLK
const int pinDataOut = 6; // SER
byte alarmas = 0; // Almacena el estado de las alarmas
void setup() {
pinMode(pinLoad, OUTPUT);
pinMode(pinClock, OUTPUT);
pinMode(pinData, INPUT);
pinMode(pinLatch, OUTPUT);
pinMode(pinShift, OUTPUT);
pinMode(pinDataOut, OUTPUT);
Serial.begin(9600); // Inicia el monitoreo por serial
}
void loop() {
// Leer datos del 74HC165
digitalWrite(pinLoad, LOW); // Captura las señales paralelas
delayMicroseconds(5);
digitalWrite(pinLoad, HIGH); // Prepara para el desplazamiento de datos
alarmas = 0; // Reiniciar variable
for (int i = 0; i < 8; i++) {
alarmas <<= 1; // Desplazar bits a la izquierda
if (digitalRead(pinData)) {
alarmas |= 1; // Almacenar el bit leído
}
digitalWrite(pinClock, HIGH);
delayMicroseconds(5);
digitalWrite(pinClock, LOW);
}
Serial.print("Estado original: ");
Serial.println(alarmas, BIN);
// Invertir bits
byte alarmasInvertidas = ~alarmas;
Serial.print("Invertido: ");
Serial.println(alarmasInvertidas, BIN);
// Invertir bits nuevamente para la salida del 74HC595
byte salidaFinal = ~alarmasInvertidas;
// Enviar datos al 74HC595 con bits invertidos nuevamente
digitalWrite(pinLatch, LOW);
shiftOut(pinDataOut, pinShift, MSBFIRST, salidaFinal);
digitalWrite(pinLatch, HIGH);
delay(2000); // Espera para observar cambios
}