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 :

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
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
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 :

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()':
et tout plein de messages de la sorte.

Je crois comprendre que le problème viendrait du fait que j'ai le
#include <MySensors>
dans le main et le Gestion_Porte mais du coup je ne comprends pas comment faire avec les pointeurs dans mon fichier Gestion_Porte.

Si quelqu'un peut m'aider ce sera avec plaisir

Merci.