Bonjour à tous.
J'aimerais réaliser un code qui me permette d'ouvrir une porte à distance à l'aide de la bibliothèque MySensors.
J'ai donc un code plutôt moche qui fonctionne, mais j'aimerais le rendre plus optimisé et plus lisible.
J'ai donc ceci maintenant :
Dans mon fichier "main.ino" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <MySensors.h> #include "Gestion_Porte.hpp" void receive(const MyMessage &message) // Lors de réception d'un message. { if (message.sensor == ID_GESTION_PORTE) // Si c'est message du noeud 0 (gestion de la porte) : { if (message.getBool()) Ouverture_Porte(&debugMessage, &etatPorteMessage); else Fermeture_Porte(&debugMessage, &etatPorteMessage); delay(10); } }
et dans un fichier Gestion_Porte.hpp j'ai :
Dans le fichier Gestion_Porte.ino :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef GESTIONPORTE_HPP #define GESTIONPORTE_HPP #include <Arduino.h> #include <MySensors.h> void Ouverture_Porte(MyMessage *pDebugMessage, MyMessage *pEtatPorteMessage); void Fermeture_Porte(MyMessage *pDebugMessage, MyMessage *pEtatPorteMessage); #endif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 void Ouverture_Porte(MyMessage *pDebugMessage, MyMessage *pEtatPorteMessage) { unsigned char ouvertureOk = 0; pDebugMessage->set("Ouverture de la porte"); send(*pDebugMessage); if (digitalRead(PIN_FDC_OPEN)) // Si le détecteur de fin de course ouverture n'est pas actif, alors : { uint64_t timeCount = millis(); digitalWrite(PIN_RELAY_PORTE,HIGH); // Alim 12V pour moteur. delay(20); ledcAttachPin(PIN_DRIVER_IN1, 0); // Attache la pin PIN_DRIVER_IN1 au canal pwm N°0 configuré ci-après. ledcWrite(0, 250); // Initialise le canal pwm 0 (voir setup()) à un signal pwm de 254 (= 1 logique). digitalWrite(PIN_DRIVER_IN2, LOW); while (digitalRead(PIN_FDC_OPEN) && ouvertureOk != 2) // Tant que le fin de course ouverture n'est pas actif : { if (millis() - timeCount > DELAY_OUVERTURE) // Si on est dans cette boucle plus longtemps que DELAY_OUVERTURE, alors : { ouvertureOk = 2; // Valeur 2 = erreur. pDebugMessage->set("Porte bloquee"); } delay(2); } ledcWrite(0, 0); // Met la vitesse du moteur à 0. ledcDetachPin(PIN_DRIVER_IN1); // Detache la pin PIN_DRIVER_IN1 du canal pwm N°0. digitalWrite(PIN_RELAY_PORTE,LOW); // Coupe l'alim 12V. //pinMode(PIN_DRIVER_IN2, INPUT); } if(!digitalRead(PIN_FDC_OPEN)) // Si le détecteur de fin de course ouverture est actif, { ouvertureOk = 1; // Valeur 1 = Ouvert. pDebugMessage->set("Porte ouverte"); } pEtatPorteMessage->set(ouvertureOk); // ouvertureOK = soit 1 soit 2. send(*pDebugMessage); send(*pEtatPorteMessage); }
Je n'arrive pas à le compiler et j'ai ce message d'erreur :
et tout plein de messages de la sorte.c:/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\ESP32\src\main.cpp.o:C:\usr\Bureau\Emeteur_Recepteur RF24 ESP32 (Poulailler)/.pio/libdeps/ESP32/MySensors/core/MyTransport.cpp:46: multiple definition of `_transportReady_cb'; .pio\build\ESP32\src\Gestion_Porte.cpp.o:C:\usr\OneDrive\Bureau\Emeteur_Recepteur RF24 ESP32 (Poulailler)/.pio/libdeps/ESP32/MySensors/core/MyTransport.cpp:46: first defined here
c:/usr/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\ESP32\src\main.cpp.o: in function `stReadyTransition()':
Je crois comprendre que le problème viendrait du fait que j'ai ledans le main et le Gestion_Porte mais du coup je ne comprends pas comment faire avec les pointeurs dans mon fichier Gestion_Porte.#include <MySensors>
Si quelqu'un peut m'aider ce sera avec plaisir
Merci.
Partager