Salve
Il titolo non rende l'idea benissimo, ma non saprei condensare meglio la questione.
in pratica ho delle chiamate alle funzioni degli interrup esterni che fanno la stessa cosa, solo su una variabile differente.
4 pin che se cambiano stato modificano un valore booleano di riferimento per quel pin e ritornano null.
in questo caso ho 4 funzioni che invece vorrei condensare in una sola, chiamata da tutti gli interrup ma che agisca sulla variabile corretta.
ora ho:
...
//dichiarazione funzioni
void Conta1 (){
check[0] = 1;
}
void Conta2 (){
check[1] = 1;
}
void Conta3 (){
check[2] = 1;
}
void Conta4 (){
check[3] = 1;
}
...
void setup() {
#ifdef DEBUG
Serial.begin(115200);
#endif
attachInterrupt(Spin1, Conta1, FALLING);
attachInterrupt(Spin2, Conta2, FALLING);
attachInterrupt(Spin3, Conta3, FALLING);
attachInterrupt(Spin4, Conta4, FALLING);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
setup_wifi();
reconnect();
client.publish(mqtt_topicd, "reset-corrente");
}
...
void loop() {
for (int C = 0; C <= 4; C++) {
if (check[C]){
#ifdef DEBUG
Serial.println ("check");
#endif
switch (C) {
case 0:
detachInterrupt(Spin1);
controllo (C);
attachInterrupt(Spin1, Conta1, FALLING);
break;
case 1:
detachInterrupt(Spin2);
controllo (C);
attachInterrupt(Spin2, Conta2, FALLING);
break;
case 2:
detachInterrupt(Spin3);
controllo (C);
attachInterrupt(Spin3, Conta3, FALLING);
break;
case 3:
detachInterrupt(Spin4);
controllo (C);
attachInterrupt(Spin4, Conta4, FALLING);
break;
}
}
}
...
La dichiarazione di quelle 4 funzioni troppo simili e lo switch case non mi paiono molto eleganti, ma non ho dea di come poter migliorare la cosa.
Ho googleato ma non ho trovato nulla di significativo.
tra i "bravi" c'è chi sa come (e se) si può fare.
Grazie