Saluti a tutti,
sto impazzendo a cercare di capire come implementare gli interrupt su un mio progetto, sto sviluppando vari moduli che poi integrerò su qualcosa di molto piu ampio, attualmente quello che vorrei capire/implementare su questo codice
#include "Adafruit_MCP23017.h"
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
#define NUMBUTTONS 8
byte buttons[] = {8, 9, 10, 11, 12, 13, 14, 15};
byte pinLed[] = {0, 1, 2, 3, 4, 5, 6, 7};
char ssid[] = "xxxxxxxxx"; // SSID of your home WiFi
char pass[] = "xxxxxxxxx"; // password of your home WiFi
boolean led_state[NUMBUTTONS];
boolean button_state[NUMBUTTONS];
boolean previous_button_state[NUMBUTTONS];
Adafruit_MCP23017 mcp;
//----------------------Richiama funzione stato pulsante
void check_button( )
{
for (int indice = 0; indice < (NUMBUTTONS); indice++) {
button_state[indice] = mcp.digitalRead(buttons[indice]);//debounce(buttons[indice]);
if (button_state[indice] == LOW && previous_button_state[indice] == HIGH)
{
led_state[indice] = 1 - led_state[indice];
}
previous_button_state[indice] = button_state[indice];
if (led_state[indice]) mcp.digitalWrite(pinLed[indice], LOW); else mcp.digitalWrite(pinLed[indice], HIGH);
}
}
// configurazione IO
void setup_IO()
{
WiFi.mode(WIFI_STA);
mcp.begin();
Serial.begin(115200);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
//ESP.restart();
}
ArduinoOTA.setHostname("test");
//ArduinoOTA.setPassword((const char *)"xxxx");
//------------------------ define pins:
for (int i = 0; i < (NUMBUTTONS); i++) {
mcp.pinMode(buttons[i], INPUT);
mcp.pinMode(pinLed[i], OUTPUT);
mcp.pullUp(buttons[i], HIGH);
mcp.digitalWrite(pinLed[i], HIGH);
led_state[i] = false;
button_state[i] = false;
previous_button_state[i] = false;
}
ArduinoOTA.begin();
}
// funsioni di sistema
void setup() {
setup_IO();
}
void loop() {
check_button();
ArduinoOTA.handle();
}
e la gestione di un interrupt da parte del MCP in modo che interrompa il normale ciclo e dia priorità alla pressione dei pulsanti.
Attualmente ho collegato 8 pulsanti sugli indirizzi "B" (con debounce hardware) e 8 relè sugli indirizzi "A"del MCP.
L' esempio nella libreria Adafruit_MCP23017 da errore di compilazione qui EIFR=0x01; (non è dichiarato)
avete un esempio funzionante o un paio di suggerimenti in modo da poter capire come procedere ?
Grazie per l'attenzione