OsmoseurV2.ino 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include <ESP8266WiFi.h>
  2. #include <BlynkSimpleEsp8266.h>
  3. #include "MCP23017.h"
  4. #define OUVERT 1
  5. #define FERME 2
  6. // Informations Blynk
  7. char auth[] = "VOTRE_AUTH_TOKEN"; // Remplacez par votre Auth Token Blynk
  8. char ssid[] = "VOTRE_SSID"; // Remplacez par votre SSID WiFi
  9. char pass[] = "VOTRE_MDP"; // Remplacez par votre mot de passe WiFi
  10. // Pin pour l'interruption
  11. const int interruptPin = 12;
  12. //Pin Actionneur
  13. const int OUT3 = 0+8;
  14. const int PompeRemonter = 1+8;
  15. const int OUT4 = 2+8;
  16. const int Reducteur = 3+8;
  17. const int PompeBooster = 4+8;
  18. const int OUT1 = 5+8;
  19. const int OUT2 = 6+8;
  20. const int EntreeEau = 7+8;
  21. const int IN2 = 4;
  22. const int IN1 = 5;
  23. const int NiveauHaut = 6;
  24. const int INPistolet = 7;
  25. #define MCP23017_ADDR 0x20
  26. MCP23017 mcp = MCP23017(MCP23017_ADDR);
  27. //Element pour Bynk
  28. BlynkTimer timer;
  29. // Fonction appelée lors de l'interruption
  30. void ICACHE_RAM_ATTR handleInterrupt() {
  31. uint8_t portA;
  32. uint8_t portB;
  33. interruptedBy(uint8_t& portA, uint8_t& portB);
  34. // Pistolet
  35. if ((portA & (1 << 7)) == 0) {
  36. Pistolet();
  37. }
  38. // Niveau Haut
  39. if ((portA & (1 << 6)) == 0) {
  40. Eteint();
  41. }
  42. // Niveau Bas
  43. if ((portA & (1 << 5)) == 0) {
  44. Alume();
  45. }
  46. // Vérifier si le bit 4 est à 0
  47. if ((portA & (1 << 4)) == 0) {
  48. ;
  49. }
  50. }
  51. void closeVanne(){
  52. mcp.digitalWrite(Reducteur,FERME);
  53. }
  54. void Alume(){
  55. Serial.println("start");
  56. timer.setTimeout(60000L, closeVanne);
  57. mcp.digitalWrite(EntreeEau,OUVERT);
  58. mcp.digitalWrite(Reducteur,OUVERT);
  59. mcp.digitalWrite(PompeBooster,OUVERT);
  60. }
  61. void Eteint(){
  62. Serial.println("Stop");
  63. mcp.digitalWrite(EntreeEau,FERME);
  64. mcp.digitalWrite(PompeBooster,FERME);
  65. }
  66. void Pistolet(){
  67. if(mcp.digitalRead(INPistolet)==0
  68. mcp.digitalWrite(PompeRemonter,OUVERT);
  69. else
  70. mcp.digitalWrite(PompeRemonter,FERME);
  71. }
  72. void setup() {
  73. // Initialiser la communication série pour le débogage
  74. Serial.begin(115200);
  75. mcp.init();
  76. mcp.portMode(MCP23017Port::B, 0);
  77. mcp.portMode(MCP23017Port::A, 0b11110000);
  78. mcp.digitalWrite(OUT3,FERME);
  79. mcp.digitalWrite(PompeRemonter,FERME);
  80. mcp.digitalWrite(OUT4,FERME);
  81. mcp.digitalWrite(Reducteur,FERME);
  82. mcp.digitalWrite(PompeBooster,FERME);
  83. mcp.digitalWrite(OUT1,FERME);
  84. mcp.digitalWrite(OUT2,FERME);
  85. mcp.digitalWrite(EntreeEau,FERME);
  86. mcp.digitalWrite(,FERME);
  87. mcp.interruptMode(MCP23017InterruptMode::Separated);
  88. mcp.interrupt(MCP23017Port::A, Change);
  89. mcp.writeRegister(MCP23017Register::IPOL_A, 0x00);
  90. mcp.clearInterrupts();
  91. // Initialiser Blynk
  92. Blynk.begin(auth, ssid, pass);
  93. pinMode(interruptPin, INPUT);
  94. attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING);
  95. }
  96. void loop() {
  97. Blynk.run();
  98. }