// 74hc165 ingressi
const int REG_SL = 2; // limegreen
const int REG_CK = 3; // violet
const int REG_DI = 4; // cyan
// 74hc595 uscite
const int latchPin = 5; // limegreen
const int clockPin = 6; // violet
const int dataPin = 7; // cyan
// 74hc165 ingressi 2
const int REG_SL2 = 8; // limegreen
const int REG_CK2 = 9; // violet
const int REG_DI2 = 10; // cyan
// 74hc595 uscite 2
const int latchPin2 = 11; // limegreen
const int clockPin2 = 12; // violet
const int dataPin2 = 13; // cyan
byte data[5];
const int pulseDelay = 2;
void setup() {
Serial.begin(115200);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(REG_SL, OUTPUT);
// set default high
digitalWrite(REG_SL, HIGH);
// default low
pinMode(REG_CK, OUTPUT);
pinMode(REG_DI, INPUT);
}
void loop() {
// acquisizione porte d'ingresso
digitalWrite(REG_SL, LOW);
delay(pulseDelay);
digitalWrite(REG_SL, HIGH);
delay(pulseDelay);
for (int i = 4; i >= 0; i--) {
for (int j = 0; j < 8; j++) {
int bit = digitalRead(REG_DI);
bitWrite(data[i], j, bit);
digitalWrite(REG_CK, HIGH);
delay(pulseDelay);
digitalWrite(REG_CK, LOW);
delay(pulseDelay);
}
}
printData();
digitalWrite(latchPin, LOW);
delay(pulseDelay);
for (int i = 0; i < 5; i++) {
shiftOut(dataPin, clockPin, LSBFIRST, data[i]);
}
digitalWrite(latchPin, HIGH);
delay(pulseDelay);
}
// Print the 40 bits
void printData() {
// index of array
for (int i = 4; i >= 0; i--) {
// walk the bits
for (int j = 7; j >= 0; j--) {
int bit = bitRead(data[i], j);
if (bit == 0)
Serial.print("_"); // or "○"
else
Serial.print("#"); // or "●"
}
Serial.print(" ");
}
Serial.println();
}
/*
// Wejścia przycisków (Serial Load)
// Button input 1 74HC165
const int latchPin = 7;
// Zegar dla przycisków (CK - Clock)
// Input clock 2 74HC165
const int clockPin = 6;
// Dane wejściowe przycisków (DI - Data In)
// Input data 9 74HC165
const int dataPin = 5;
// Liczba rejestrów 74HC165
// Number of 74HC165 shift registers
const int ledPin = 8;
void setup() {
// Ustawienie prędkości komunikacji szeregowej
Serial.begin(9600);
pinMode(dataPin, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// LED do testowania zegara
pinMode(ledPin, OUTPUT);
// Załaduj stan przycisków
// Początkowy stan zegara
digitalWrite(clockPin, LOW);
// Włącz LED
digitalWrite(ledPin, HIGH);
delayMicroseconds(5);
digitalWrite(latchPin, LOW);
// Krótkie opóźnienie dla stabilności
delayMicroseconds(5);
digitalWrite(latchPin, HIGH);
}
// Funkcja odczytuje 8 bitów z rejestru
byte ReadOne165() {
byte data = 0;
// Ładowanie przycisków do rejestru
digitalWrite(latchPin, LOW); // Wczytaj dane
delayMicroseconds(5); // Stabilizacja
digitalWrite(latchPin, HIGH); // Przejdź do przesuwania
// Odczyt bitów szeregowo
for (int i = 0; i < 8; i++) {
digitalWrite(clockPin, LOW); // Zegar niski
delayMicroseconds(2);
if (digitalRead(dataPin)) {
// Przesuń bit na miejsce
data |= (1 << (7 - i));
}
digitalWrite(clockPin, HIGH);
digitalWrite(ledPin, LOW);
delayMicroseconds(5);
}
return data;
}
void loop() {
Serial.println("Loop started");
Serial.print("dataPin: ");
Serial.println(digitalRead(dataPin));
Serial.print("clockPin: ");
Serial.println(digitalRead(clockPin));
Serial.print("latchPin: ");
Serial.println(digitalRead(latchPin));
// Odczyt danych z rejestru
byte data = ReadOne165();
Serial.print("ReadOne165: ");
// Wyświetl dane w formacie binarnym
Serial.println(data, BIN);
delay(500);
}
*/
/*
#include <Wire.h>
#define led 13
int i;
void setup() {
// CODE IS IDENTICAL FOR ALL OTHER SLAVE DEVICES
Wire.begin(1);
Wire.onReceive(receiveEvent);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
i = 0;
}
void loop() {
if(i == 1) {
digitalWrite(led, HIGH);
delay(100);
i = 0;
} else
digitalWrite(led, LOW);
}
void receiveEvent(int num) {
i = Wire.read();
}
*/DS: dataPin (cyan)
SHCP: clockPin (violet)
STCP: latchPin (limegreen)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
1 ... 2 ... 3 ... 4 ... 5 ... 6 ... 7 ... 8 ... 9 ... 10
11 . 12 .13 . 14 . 15 .16 . 17 . 18 .19 . 20
21 . 22 .23 . 24 . 25 .26 . 27 . 28 .29 . 30
31 . 32 .33 . 34 . 35 .36 . 37 . 38 .39 . 40
RELAY 1
RELAY 40