/*! \mainpage Guide de démarrage rapide * * \section intro_sec Introduction * * Cette bibliothèque inclue une seule classe : PayloadFormatter.@n * Elle permet de construire une trame contenant : le nombre total de trames à transmettre, le numéro de la trame transmise, le nombre de lignes de températures, le nombre de colonnes de températures, la date et l'heure,@n * la température extérieure, les températures de la matrice aux nombre de lignes * colonnes.@n * Cette trame peut ensuite être décodée via le décodeur de trame écrit en javascript disponible ici.@n * Le décodeur peut être intégré à TTN.@n@n * Attention, il faut préalablement installer la bibliothèque RTClib-master dans le dossier Documents\\Arduino\\libraries téléchargeable ici.@n * Elle est nécessaire car elle définit l'objet DateTime. * * Voici un code d'exemple de l'utilisation de l'objet PayloadFormatter : * * * \code{.cpp} * #include * * //Programme d'exemple d'utilisation de la bibliothèque PayloadFormatter * //Création de l'objet pour 4 températures internes (2 lignes par 2 colonnes) * PayloadFormatter formatter(2,2); * * double temperatureExterne = 28.58; * double temperatureInternes[2][4] = {{15.21,16.18,12.45,18.42},{18.58,11.49,22.38,9.73}}; * DateTime dt(2020, 5, 14, 12,39); //14/05/2020 à 12h39 * * uint8_t *buffer(NULL); * uint16_t size(0); * * void setup() * { * Serial.begin(115200); * Serial.println("Démarrage d'une session de construction de 2 trames"); * * formatter.startSession(2); * size = formatter.buildPayload(&buffer, &dt, temperatureExterne, temperatureInternes[0]); * * Serial.print("Trame construite : "); * for(int i(0); i < size; i++) * { * buffer[i] <= 0x0F ? Serial.print("0") : Serial.print(""); Serial.print(buffer[i], HEX); Serial.print(" "); * } * Serial.printf(" de taille : %u\n Session terminee ? %s\n", size, formatter.endSession() ? "OUI" : "NON"); * * size = formatter.buildPayload(&buffer, &dt, temperatureExterne, temperatureInternes[1]); * * Serial.print("Trame construite : "); * for(int i(0); i < size; i++) * { * buffer[i] <= 0x0F ? Serial.print("0") : Serial.print(""); Serial.print(buffer[i], HEX); Serial.print(" "); * } * Serial.printf(" de taille : %u\n Session terminee ? %s\n", size, formatter.endSession() ? "OUI" : "NON"); * * Serial.println("Fin de l'exemple"); * } * * void loop() * { * * } * \endcode * * \author Anatole SCHRAMM-HENRY * \date 15 Jan 2020 * \copyright All Right Reserved */ #ifndef PAYLOADFORMATTER_H #define PAYLOADFORMATTER_H #include #include //Nécessaire afin d'utiliser l'objet DateTime /*! * @brief La classe PayloadFormatter permet de construire une trame formatée. * */ class PayloadFormatter { public: /*! * Le constructeur de la classe prend en paramètres : * @param numOfRow : correspond au nombre de lignes de températures. Maximum 15. * @param numOfCol : correspond au nombre de colonnes de températures. Maximum 15. * @warning : une allocation dynamique est effectuée, attention avec les microcontrôleurs ayant une faible quantité de RAM. */ PayloadFormatter(uint8_t numOfRow, uint8_t numOfColumn); /*! * Le destructeur libère la mémoire dynamiquement allouée : */ ~PayloadFormatter(); /*! * Construit une trame à l'aide des informations passées en paramètre. * @param buffer : l'adresse du buffer de type uint8_t contenant la trame formatée. Voir le code d'exemple pour plus d'information. * @param dateTime : l'objet contenant la date et l'heure. * @param externTemp : la température externe. * @param tempArray : le tableau de double contenant l'ensemble des températures internes. * @param numOfRow : non utilisé dans cette version. * @param numOfColumn : non utilisé dans cette version. * @return uint16_t : la taille en octet de la trame construite. */ int16_t buildPayload(uint8_t **buffer, DateTime *dateTime, double externTemp, double *tempArray, uint8_t numOfRow = -1, uint8_t numOfColumn = -1); /*! * Indique le démarrage d'une session de construction de trames. * @param totalPackets : le nombre total de trames qui vont être construites lors de la session. Maximum 15. */ void startSession(uint8_t totalPackets); /*! * Permet de fermer une session de construction. * @return boolean : indiquant si la session a été fermée correctement, ie si le nombre de trame indiqué dans startSession() a bien été construit. */ boolean endSession(); protected: private: uint8_t _totalPayloads; uint8_t _currentPayload; uint8_t _numOfRow; uint8_t _numOfColumn; uint8_t *_payload; uint8_t _length; }; #endif //PAYLOADFOMATTER_H