#define ROWS 2
#define COLS 2
#define THRESHOLD 1
#define scanIntervalMillis 1000
int rowPins[ROWS] = {7, 8};
int colPins[COLS] = {2, 3};
int sensorState[ROWS][COLS];
unsigned long previousMillis = 0;
void setup() {
Serial.begin(9600);
// Zeilenpins als INPUT (ohne Pull-up)
for (int i = 0; i < ROWS; i++) {
pinMode(rowPins[i], INPUT);
}
// Spaltenpins als OUTPUT und auf LOW setzen
for (int j = 0; j < COLS; j++) {
pinMode(colPins[j], OUTPUT);
digitalWrite(colPins[j], LOW);
}
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= scanIntervalMillis) {
previousMillis = currentMillis;
scanSensors();
printSensorArray();
}
}
void scanSensors() {
// Jede Spalte nacheinander aktivieren
for (int j = 0; j < COLS; j++) {
// Setze die aktuelle Spalte auf HIGH
digitalWrite(colPins[j], HIGH);
delay(10); // Kleine Verzögerung zur Signalstabilisierung
// Lese die Zeilenwerte
for (int i = 0; i < ROWS; i++) {
int sensorValue = digitalRead(rowPins[i]);
sensorState[i][j] = (sensorValue >= THRESHOLD) ? 1 : 0;
}
// Setze die aktuelle Spalte wieder auf LOW
digitalWrite(colPins[j], LOW);
delay(500);
}
}
void printSensorArray() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
Serial.print(sensorState[i][j]);
Serial.print(" ");
}
Serial.println();
}
Serial.println();
}