C++ et lib arduino problème de syntaxe ? incompréhensible

Problème avec import librairie

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour ,

J’ai des souci avec l’import de librairie je voudrais importé deux librairie: #include <TinyRTClib.h> #include <LiquidCrystal_I2C.h>

Bon mon premier problème est que c’est deux libraires en inclut une autre: #include <Wire.h>

donc quand je les laisse en état je me retrouve avec cette erreur :

Plusieurs bibliothèque trouvées pour "Wire.h" #include <LiquidCrystal_I2C.h>

J’ai donc décidé de modifier cette librairie est d’enlever l’import wire dans celle ci

mais c’est pas concluant je sèche un peu il est possible qu’il y est d’autre erreurs que je ne vois pas et je me focalise que sur ça ? voici le code

ino :

/*
    Name:       reveil_matin.ino
    Created:  05/12/2019 13:07:16
    Author:     Marycha
*/



// The setup() function runs once each time the micro-controller starts

#include <TinyRTClib.h>
#include <LiquidCrystal_I2C.h>


#include"ecran.h"

Screen Lcd(0x27, 20, 4);
RTC_DS1307 Rtc;

void setup()
{
    // initiaisation des objets
    Lcd.init();
    Wire.begin();
    Rtc.begin();

    // Mise a l'heure du module rtc s'il ne l'etait pas
    if (!Rtc.isrunning())
    {
        Rtc.adjust(DateTime(__DATE__, __TIME__));
    }

}


void loop()
{
    
    Lcd.display_now(Rtc.now());
}

ecran.h

#pragma once




class Screen : public LiquidCrystal_I2C
{
  private:
    
  public:
    Screen(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows);
    void Setup(bool aState_alarm);
    void display_now(DateTime date);
    void display_test(char *message);
    bool state_alarm;
};

ecran.cpp

#include "ecran.h"



Screen::Screen(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows) : LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows)
{


}

void Screen::Setup(bool aState_alarm)
{

    state_alarm = aState_alarm;

}

void Screen::display_now(DateTime date)
{
    home();
    backlight();
    setCursor(4, 0);
    char format_time[16] = "";
    sprintf(format_time, "%2d:%2d:%2d", date.hour(), date.minute(), date.second());
    print(format_time);

}

void Screen::display_test(char* message)
{
    home();
    backlight();
    setCursor(0, 0);
    print(message);
    print(", je mesure: ");
    print(strlen(message));
    print("C");
}

et voici de quoi il se plaint:

C:\Users\mom_nom\OneDrive\Documents\Arduino\libraries\TinyRTCLib\TinyRTClib.cpp:11:13: fatal error: TinyWireM.h: No such file or directory

Plusieurs bibliothèque trouvées pour "TinyRTClib.h"
    #include <TinyWireM.h>

Utilisé : C:\Users\mom_nom\OneDrive\Documents\Arduino\libraries\TinyRTCLib
             ^~~~~~~~~~~~~

Plusieurs bibliothèque trouvées pour "LiquidCrystal_I2C.h"
compilation terminated.

Utilisé : C:\Users\mon_nom\OneDrive\Documents\Arduino\libraries\LiquidCrystal_I2C
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

D’avance Merci

Édité par Marycha

Un bon travail se voit, un excellent est invisible.

+1 -0

Cette réponse a aidé l’auteur du sujet

Vérifie que tu as bien mis ces directives dans tes fichiers d’en-têtes y compris dansTinyRTClibet LiquidCrystal_I2C .

#ifndef CONSTANTE_H
#define CONSTANTE_H

/* Les déclarations */

#endif

Édité par El Poulpos

+0 -0
Auteur du sujet

Vérifie que tu as bien mis ces directives dans tes fichiers d’en-têtes y compris dansTinyRTClibet LiquidCrystal_I2C .

#ifndef CONSTANTE_H
#define CONSTANTE_H

/* Les déclarations */

#endif

Octodex

Bonjour ,

Tu aurais une explication (tuto) pour ça parce que je l’ai vu régulièrement mais je ne connait pas le fin de l’histoire

Du coup j’ai trouver ceci pour que je puisse comprendre ça ma éclairer un peu ( je suis un peu long a la comprenette ) : https://cpp.developpez.com/faq/cpp/?page=Les-classes-en-Cplusplus#Comment-structurer-ma-classe-en-un-fichier-h-et-un-fichier-cpp

j’ai trouver mon problème il suffisais que je rajoute dans mon fichier ecran.h les deux librairie avec #include

Mais j’ai un autre petit souci : DateTime (uint32_t t = SECONDS_FROM_1970_TO_2000); parce que je lui demande ça :

void Screen::display_now(DateTime now)
{
    home();
    backlight();
    setCursor(4, 0);
    char format_time[16] = "";
    sprintf(format_time, "%2d:%2d:%2d", now.hour(), now.minute(),now.second());
    print(format_time);

}

même idéalement je voudrais passer par un pointeur sur DateTime pour ne pas avoir de décalage mais des pointeur sur objet o_O

Édité par Marycha

Un bon travail se voit, un excellent est invisible.

+0 -0

Après une première erreur de compilation, je suppose que t’as dû modifier un des fichier .h, mais ta modification n’a sûrement pas été prise en compte par ton compilateur pour faire un réassemblage des .cpp générés après le prépocessing, donc les anciens fichiers .o de ton projet ne sont pas réécris de façon conforme.

Je sais que ça n’est pas très clair (ça ne l’est pas pour moi non plus ^^ ), mais en bref les fichiers .o de ton projet étaient obsolètes, donc la solution la plus évidente était d’en générer de nouveaux.

Si quelqu’un d’autre pouvait nous l’expliquer plus en détails ce serait bien.

snaptube telegram web

Édité par clarc

+0 -1
Auteur du sujet

Oui @clarc malgré tout je comprend se que tu dit et cela semble logique :D

Ce qui ne l’est pas à mes yeux c’est que je constate des erreurs différentes en fonction des éditeurs que j’utilise.

J’ai réussi à les identifiés et je fait avec, mais c’est surement parce que je fait quelque chose de mal.

Par exemple:

Si j’utilise visual studio :

Je dois faire mes #include<lib> dans le *.ino. Sinon il ne connais pas les structures dans mon fichier

Quand je bascule sur ide arduino il me dit ceci :

exit status 1 expected class-name before '{' token dans le fichier ou j’utilise des structures de ma lib.

Donc du coup de fait mes include dans le .h de mon fichier et le #include"monfichier.h dans le .ino . Pour ide arduino aucun souci.

La solution serais de les inclures aux deux endroit mais dans mon imagination, j’avais compris que si on fait un #include on copie le code de celui ci en lieu et place de cet include. cela reviendrais du coup à le faire deux fois !! :colere2: et c’est ça qui me pose problème ( pas très optimisé).

Édité par Marycha

Un bon travail se voit, un excellent est invisible.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte