Utiliser une librairie existante dans la librairie que je crée

Bonjour à tous,

Je crée ce sujet car je rencontre une difficulté que je n'arrive pas à résoudre, et je ne trouve pas de sujets en parlant déjà.
Voila, j'essaie de créer une librairie ayant pour but de gérer l'échange d'information entre une carte SD et une sortie série bluetooth. Pour cela, j'ai besoin de faire appel aux bibliothèques SdFat, SPI, et RTClib. J'ai fais ceci de la manière suivante :

#include <Arduino.h>
#include "RecupBT.h"
#include "RTClib.h"
#include "SdFat.h"
#include <SPI.h>

//Modifie le String pris en argument pour lui attribuer la commande reçue

void ReceptionBT(String commande){

if(Serial1.available()){
  int i = 0;  
  char commande_[50];
  while (Serial1.available()!=0 && i<=49)
    {
    commande_[i] = Serial1.read();
    delay(10);
    i++;
    }
  commande_[i] = '\0';
  commande = commande_;
}
}
  
//Test envoi de donnees :

boolean donneesDemandeesBT(String commande){
return commande.equals("envoi donnees");}
    
//Televersement de SD vers Serial1

void envoiDonneesBT(SdFat sd, SdFile myFile){

 if (sd.exists("classeur1.csv")){
    myFile.open("classeur1.csv",O_READ);
    while (myFile.available()){
    Serial1.write(myFile.read());
    }
    myFile.close();
    }
}

//Test envoi de Date & Ref :

boolean refsDemandeesBT(String commande){
return commande.equals("envoi Refs");}

//Concatenation et envoi de DateRef :

void envoiRefsBT(RTC_DS1307 rtc, char RefNano){
  
  DateTime now = rtc.now();

  Serial1.print("/");
  Serial1.print(now.year(), DEC);
  Serial1.print("_");
  Serial1.print(now.month(), DEC);
  Serial1.print("_");
  Serial1.print(now.day(), DEC);
  Serial1.print("_");
  Serial1.print("Nano");
  Serial1.print(RefNano);
  Serial1.print("_Donnees.txt");
  Serial1.print("\n");
 
}

Mais je ne suis vraiment pas sur de la manière dont il faut utiliser les objets associés aux bibliothèques (SdFile, SdFat, RTC_DS1307). Lorsque je comile ce code, je reçois l'erreur

In file included from C:\Users\Utilisateur\Documents\Arduino\Nanoé\Programme_modulaire\Programme_modulaire.ino:9:0:

sketch\SdFat.h:27:33: fatal error: SdSpiCard/SdSpiCard.h: No such file or directory

 #include "SdSpiCard/SdSpiCard.h"

                                 ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560

Sauriez-vous m'aider à comprendre ce qui ne va pas ?

Dans un premier temps je ne mettais pas en argument les objets type "rtc" ou "myFile". Je recevais alors un message d'erreur selon lequel ces objets n'étaient pas déclarés. Je les ai alors déclaré au-dessus du setup, mais j'avais alors un problème de double déclaration avec le programme dans lequel j'insère cette bibliothèque. J'ai donc essayé de cette manière, mais je ne suis pas sur que ce soit très propre ?

Merci pour vos conseils !

Henri

RecupBT.cpp (1.26 KB)

RecupBT.h (228 Bytes)

si vous mettez vos 2 fichiers dans un répertoire toto et que vous créez un fichier toto.ino qui contient le code tout simple

#include "RecupBT.h"
void setup() {}
void loop() {}

et que vous essayez de compiler en prenant bien soin de dire que votre architecture est un Mega (parce que vous utilisez Serial1), ça compile sans problème

Notez que votre fonction ReceptionBT() risque de vous décevoir à l'usage. Vous ne pouvez pas espérer avoir reçu à tous les coups toute la commande de la façon dont c'est codé. Vous devriez laisser tomber l'usage de la classe String (avec un grand S) et uniquement travailler avec des tableaux de caractères (string avec un petit s) en utilisant éventuellement les fonctions C standard stdlib.h et string.h

Pour comprendre comment bien utiliser le port série il y a un article en anglais qu'il est bon de lire et comprendre:
Serial Input Basics

Pour ce code là void envoiDonneesBT([color=red]SdFat sd, SdFile myFile[/color]) { je vous conseille de lire cet article

Merci pour ta réponse et les docs ! Je vais regarder tous cela et je reviens :slight_smile:
Henri