#include #include "MCP23017.h" #define OUVERT 1 #define FERME 2 // Pin pour l'interruption const int interruptPin = 12; //Pin Actionneur const int OUT3 = 0+8; const int PompeRemonter = 1+8; const int OUT4 = 2+8; const int Reducteur = 3+8; const int PompeBooster = 4+8; const int OUT1 = 5+8; const int OUT2 = 6+8; const int EntreeEau = 7+8; const int IN2 = 4; const int IN1 = 5; const int NiveauHaut = 6; const int INPistolet = 7; #define MCP23017_ADDR 0x20 MCP23017 mcp = MCP23017(MCP23017_ADDR); // Fonction appelée lors de l'interruption void ICACHE_RAM_ATTR handleInterrupt() { uint8_t portA; uint8_t portB; interruptedBy(uint8_t& portA, uint8_t& portB); // Pistolet if ((portA & (1 << 7)) == 0) { Pistolet(); } // Niveau Haut if ((portA & (1 << 6)) == 0) { Eteint(); } // Niveau Bas if ((portA & (1 << 5)) == 0) { Alume(); } // Vérifier si le bit 4 est à 0 if ((portA & (1 << 4)) == 0) { ; } } void closeVanne(){ mcp.digitalWrite(Reducteur,FERME); } void Alume(){ Serial.println("start"); timer.setTimeout(60000L, closeVanne); mcp.digitalWrite(EntreeEau,OUVERT); mcp.digitalWrite(Reducteur,OUVERT); mcp.digitalWrite(PompeBooster,OUVERT); } void Eteint(){ Serial.println("Stop"); mcp.digitalWrite(EntreeEau,FERME); mcp.digitalWrite(PompeBooster,FERME); } void Pistolet(){ if(mcp.digitalRead(INPistolet)==0 mcp.digitalWrite(PompeRemonter,OUVERT); else mcp.digitalWrite(PompeRemonter,FERME); } void setup() { // Initialiser la communication série pour le débogage Serial.begin(115200); mcp.init(); mcp.portMode(MCP23017Port::B, 0); mcp.portMode(MCP23017Port::A, 0b11110000); mcp.digitalWrite(OUT3,FERME); mcp.digitalWrite(PompeRemonter,FERME); mcp.digitalWrite(OUT4,FERME); mcp.digitalWrite(Reducteur,FERME); mcp.digitalWrite(PompeBooster,FERME); mcp.digitalWrite(OUT1,FERME); mcp.digitalWrite(OUT2,FERME); mcp.digitalWrite(EntreeEau,FERME); mcp.digitalWrite(,FERME); mcp.interruptMode(MCP23017InterruptMode::Separated); mcp.interrupt(MCP23017Port::A, Change); mcp.writeRegister(MCP23017Register::IPOL_A, 0x00); mcp.clearInterrupts(); // Initialiser Blynk Blynk.begin(auth, ssid, pass); pinMode(interruptPin, INPUT); attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING); } void loop() { }