Salut les amis !
Pour mon projet actuel, un contrôleur de prises connectées Sonoff S26 via internet, j'ai décidé de faire les choses proprement pour une fois : séparer le fichier ino en plusieurs fichiers cpp avec les fonctions dedans, et ajouter un fichier .h avec les déclarations en extern des variables globales et les prototypes des fonctions de mes fichiers cpp.
Mal m'en a pris, car je galère dessus depuis hier, grave (comme dit ma fille)...
J'ai 2 problèmes principaux à la compilation mais pas mal de questions en plus :
1/ D'abord les prototypes ne font rien : le compilo (ou le linker) me dit qu'il ne trouve pas mes fonctions. Exemple :
C:\Users\irena\Documents\Arduino\Client_simple_final\Client_simple_final.ino: In function 'void loop()':
Client_simple_final:136: error: 'setTimesBE' was not declared in this scope
if (timeinfo.tm_hour + timeinfo.tm_min == 0) setTimesBE ();
Alors que j'ai bien dans le fichier .h :
void setTimesBE ();
Tous mes fichiers .cpp et le .ino débutent par le include de mon fichier .h
#include "client.h"
2/ Ensuite j'utilise une struct que j'ai définie dans le fichier .h et j'en déclare une à la ligne suivante :
typedef struct {
byte device;
byte days : 7; // binary 0bSMTWTFS (Sunday, Monday, Tuesday ... Saturday) - use 7 bits
byte hourBegin; // 0 ... 23
byte minBegin; // 0 ... 59
byte hourEnd;
byte minEnd;
byte randomMin; // randomly add / decrease begin and end times of xx minutes
} TimeSlot ;
TimeSlot Slot[];
Puis je l'initie dans un fichier cpp (pas dans le ino, car c'est un paramètre que j'aimerais rendre facilement accessible à un utilisateur), mais le compilateur ne la connait pas :
C:\Users\irena\Documents\Arduino\Client_simple_final\Client_simple_final.ino: In function 'void verifyDevices(int)':
Client_simple_final:149: error: 'Slot' was not declared in this scope
byte device = Slot*.device;[/quote]Ce qui est bizarre c'est que maligne 149 n'est pas comme le dit le compilateurn c'est en vérité*
* *byte device = Slot[i].device;* *
Si vous pouvez m'aider à corriger ça, ce sera déjà un grand pas en avant pour moi.
A part ça, j'utilise des #define pour définir des constantes (tailles de tableaux par exemple ou numéro de pin). J'ai remarqué que si je les mets dans le .h elles ne sont pas connues du programme alors que si je les mets dans le ino ça marche. C'est normal ? Peut-on faire autrement ? Mon but est de simplifier le ino au maximum...
Pour moi, l'idéal (mais peut-on atteindre l'idéal dans notre monde ? C'est le sujet de philo du bac 2019, je relève les copies dans 4 heures ) serait d'avoir un fichier spécifique (extension .h ou autre) dans lequel je mettrais tous les paramètres utilisateur : ssid, password, nombre de prises, nom des prises, définition du contenu de mon tableau de structure, etc. Est-ce possible ?
Merci de votre aide.