#define clockEnablePin 16 // CE (INH)D9 16
#define ploadPin 17 // PL (SH)D8 17
#define dataPin1 12 // Q7 (SO)MISO 12 // герконы положения фигур
#define dataPin2 14 // Q7 (SO)MISO 14 // сенсорные кнопки прикосновения
#define clockPin 13 // CP (CLK)MOSI 13
#define pulseWidth 1 // Задержка сдвига в мксек. увеличить если не успевает считывать данные
#define chipCount 8 // Количество микросхем
uint8_t dataWidth = chipCount * 8; //число считываемых бит
typedef struct INP // тип данных для считывания
{
uint64_t inputs1;
uint64_t inputs2;
};
INP inputs;
bool Gerkon[64]; // положение герконов 0-разомкнут/1-замкнут
bool Sensor[64]; // положение сенсорных кнопок 0-отжата/1-нажата
void setup() {
Serial.begin(115200);
pinMode(clockEnablePin, OUTPUT);
pinMode(ploadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin1, INPUT);
pinMode(dataPin2, INPUT);
}
void loop() {
inputs = Read_inputs(); // функция считывания данных в память
Serial.println("|_Name_|__1row__|__2row__|__3row__|__4row__|__5row__|__6row__|__7row__|__8row__|");
Serial.print("Gerkon:|");
for (int i = 0; i < dataWidth; i++) {
Gerkon[i] = bitRead(inputs.inputs1, i); // запись данных герконов в массив
Serial.print(Gerkon[i]);
if ((i + 1) % 8 == 0) {
Serial.print("|");
}
}
Serial.println();
Serial.print("Sensor:|");
for (int i = 0; i < dataWidth; i++) {
Sensor[i] = bitRead(inputs.inputs2, i); // запись данных сенсоров в массив
Serial.print(Sensor[i]);
if ((i + 1) % 8 == 0) {
Serial.print("|");
}
}
Serial.println();
delay(2000);
}
INP Read_inputs() {
INP result = {0, 0};
digitalWrite(clockEnablePin, HIGH);
digitalWrite(ploadPin, LOW);
delayMicroseconds(pulseWidth);
digitalWrite(ploadPin, HIGH);
digitalWrite(clockEnablePin, LOW);
for (int16_t i = 0; i < dataWidth; i++) {
result.inputs1 |= (((uint64_t)digitalRead(dataPin1)) << ((dataWidth - 1) - i));
result.inputs2 |= (((uint64_t)digitalRead(dataPin2)) << ((dataWidth - 1) - i));
digitalWrite(clockPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(clockPin, LOW);
}
return result;
}