ESP32, MySensors and function



  • Hello everyone. I would like to create a code that allows me to open a door remotely using the MySensors library.

    So I have a rather ugly code that works, but I would like to make it more optimized and readable. So I have this now: In my “main.ino” file :

    #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);
    	}
    

    in my file Gestion_Porte.hpp i've :

    #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
    

    in Gestion_Porte.ino :

    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);
    }
    ...
    

    I can’t compile it and I get this error message:

    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()':

    I understand that the problem might come from the fact that I have #include <MySensors> in the main and the Gestion_Porte but then I don’t understand how to do with the pointers in my Gestion_Porte file.

    If someone can help me, it would be with pleasure :slight_smile:

    Thank you



  • You should only include the relevant header file in the file Gestion_Porte.hpp, not Mysensors.h
    For example

    #include <core/MyTransport.h>
    

Log in to reply
 

Suggested Topics

0
Online

11.2k
Users

11.1k
Topics

112.5k
Posts