Salve a tutti, ho interfacciato un arduino mega ad un dartboard elettonico, ho però un problema di lettura della matrice, essendo che l'arduino mega deve solo leggere i colpi e non gestire tutto il dartboard (la sua elettronica è e deve rimarere operativa), ho impostato righe e colonne come input (non posso usare la logica di opendart per mantenere l'elettronica originale) e fin qui tutto bene, le colonne me le rileva giuste, mentre le righe le rileva tutte in sequenza tenendo premuto il settore, se premo e rilascio svariate volte segna le righe random (vedasi screenshot, fatto con mega scollegato...)
ecco il codice, spero almeno in un indizio per poter risolvere
#define ROWS 12
#define COLS 7
const int rowPins[ROWS] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
const int colPins[COLS] = {22, 23, 24, 25, 26, 27, 28};
int scoreMatrix[ROWS][COLS] = {
{85, 86, 87, 88, 89, 90, 91},
{92, 93, 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, 41, 42},
{43, 44, 45, 46, 47, 48, 49},
{50, 51, 52, 53, 54, 55, 56},
{64, 65, 66, 67, 68, 69, 70},
{71, 72, 73, 74, 75, 76, 77},
{78, 79, 80, 81, 82, 83, 84},
{95, 96, 97, 98, 99, 100, 101}
};
bool previousRowState[ROWS];
bool previousColState[COLS];
const unsigned long debounceTime = 150;
unsigned long lastDebounceTime[ROWS + COLS];
void setup() {
Serial.begin(115200);
// Configura le RIGHE
for (int i = 0; i < ROWS; i++) {
pinMode(rowPins[i], INPUT_PULLUP);
previousRowState[i] = HIGH;
lastDebounceTime[i] = 0;
}
// Configura le COLONNE
for (int j = 0; j < COLS; j++) {
pinMode(colPins[j], INPUT_PULLUP);
previousColState[j] = HIGH;
lastDebounceTime[ROWS + j] = 0;
}
}
void loop() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (digitalRead(rowPins[i]) == LOW && digitalRead(colPins[j]) == LOW
&& (millis() - lastDebounceTime[i] > debounceTime)
&& (millis() - lastDebounceTime[ROWS + j] > debounceTime)) {
Serial.print("Colpito segmento: R");
Serial.print(i);
Serial.print(" C");
Serial.print(j);
Serial.print(" - Punti: ");
Serial.println(scoreMatrix[i][j]);
lastDebounceTime[i] = millis();
lastDebounceTime[ROWS + j] = millis();
}
}
}
}

