Saluti!
Porgo una domanda, non so se è di identità semplice o fattibile, ma non bastonatemi...
Allego, per lo scopo, un sketch grezzo e banale di esempio.
const byte BUTTON_1 = 2;
const byte BUTTON_2 = 3;
const byte LED_1 = 10;
const byte LED_2 = 8;
//-----------------
void setup() {
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(BUTTON_1, INPUT_PULLUP);
pinMode(BUTTON_2, INPUT_PULLUP);
}
//-----------------
void loop() {
blink(LED_1, BUTTON_1);
}
//-----------------
void blink(byte AA, byte BB) {
if (digitalRead(BB) == LOW) {
digitalWrite(AA, HIGH);
delay(200);
digitalWrite(AA, LOW);
delay(200);
digitalWrite(AA, HIGH);
delay(200);
digitalWrite(AA, LOW);
delay(200);
digitalWrite(AA, HIGH);
delay(200);
digitalWrite(AA, LOW);
delay(200);
digitalWrite(AA, HIGH);
delay(200);
digitalWrite(AA, LOW); // OFF
// un altro sacco e mezzo di righe come queste....
}
}
Il void Blink(byte AA, byte BB) (nome a caso) nel mio esempio mi consente di poterlo definire una sola volta ed ad ogni utilizzo, cambiando i nomi delle variabili, posso richiamarlo per scopi diversi con LED e Pulsanti diversi: ma questo pare che valga solo per i Pin di Arduino.
Il mio problema è il seguente:
sto utilizzando quattro port Expander MCP23017 (I2C)
avvalendomi della libreria DFRobot_MCP23017
https://github.com/DFRobot/DFRobot_MCP23017
Le libreie per MCP23017, dalle più perverse alle più user-friendly, più o meno, sono tutte simili nella sintassi ...a meno che non ce ne sia una che non conosco che mi permette di associare subito al numero del pin, anche l'ID del MCP.
Per l'MCP23017, dovrei fare i seguenti passaggi
(li scrivo tutti così evitiamo giri ridondanti di messaggi):
#include "Wire.h"
#include "DFRobot_MCP23017.h"
DFRobot_MCP23017 mcp_1(Wire, 0x20);
DFRobot_MCP23017 mcp_2(Wire, 0x21);
DFRobot_MCP23017 mcp_3(Wire, 0x22);
DFRobot_MCP23017 mcp_4(Wire, 0x23);
const byte LED1 = 10;
const byte LED2 = 8;
const byte BUTTON1 = 2;
const byte BUTTON2 = 3;
void setup() {
Wire.begin();
mcp_3.pinMode(LED1, OUTPUT);
mcp_3.pinMode(LED2, OUTPUT);
mcp_3.pinMode(BUTTON1, INPUT_PULLUP);
mcp_3.pinMode(BUTTON2, INPUT_PULLUP);
}
void loop() {
}
In breve, per l'MCP23017, un digitalWrite o un digitalRead deve essere così definito:
mcp.digitalWrite(LED, HIGH)
mcp.digitalRead(BUTTON)
oppure, come nel mio caso che ne utilizzo più di uno, (ad esempio per il terzo):
mcp3.digitalWrite(LED, HIGH)
mcp3.digitalRead(BUTTON)
Come posso (ammesso che sia possibile) inserire nelle variabili del void Blink()
anche i "prefissi" mcp1, mcp2, ecc.
in modo da poterle richiamare, lo scrivo con schiettezza, giusto per rendere l'idea:
mcp3.LED oppure mcp3.BUTTON ?