Bonjour,
je ne comprend pas bien comment déclarer mes fonctions avec plusieurs fichiers.
J'ai toujours des problèmes de compilation.
Que dois je faire pour que cela fonctionne ?
ne pas mettre #include "functions.cpp" dans test.h
l'idéal serait d'ailleurs de l'appeler functions.h
vous pouvez inclure functions.h dans functions.cpp et dans test.ino
donc
test.ino importe functions.h
functions.cpp importe functions.h et implémente le code des fonctions. L'import du header functions.h est important pour que si vous appelez dans la première fonction du fichier des fonctions qui sont plus loin alors il connait leur existence et signature et peut vérifier les paramètres
et comme vous l'avez bien noté, tout est au niveau de votre projet et ce ne sont pas des imports système, on utilise bien
#include [color=green]"[/color]functions.h[color=green]"[/color] et pas #include [color=red]<[/color]functions.h[color=red]>[/color]
J'ai supprimé #include "functions.cpp" dans test.h
J'ai inclus functions.h dans functions.cpp
Et, renomé test.h en functions.h ainsi que le nom de fichier de l'include.
Mais rien ni fait j'ai toujours 2 erreurs à la compilation:
#include "functions.h"
#include "Arduino.h" // uniquement parce que j'utilise Serial.print
void function_A()
{
for (int x = 0; x < 10; x++) function_B(x);
}
void function_B(int y)
{
Serial.print(y);
Serial.print("|");
}
[color=blue][b]functions.h[/b][/color]
/*
functions.h - this is a demo.
*/
#ifndef functions_h // evite les inclusions récursives
#define functions_h
void function_A();
void function_B(int y);
#endif
Il faut bien sûr vous assurer que les 3 fichiers soient bien dans le même répertoire qui doit s'appeler test
Et bien déclarés/ajoutés à votre projet pour que les instructions de compilation prennent en compte ces fichiers ==> dans l'IDE les 3 tabs doivent être visibles
Non, pas vraiment, cela fonctionne parfaitement dans l'example, mais pas vraiment dans mon projet.
J'ai une série d'erreurs pointant sur mon fichier .cpp
In file included from C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:1:0:
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.h:4:8: error: 'uint8_t' does not name a type
extern uint8_t SmallFont[];
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.h:20:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
};
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.h:20:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.h:20:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.h:20:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp: In function 'void Settings()':
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:7:3: error: 'boolean' was not declared in this scope
boolean quitMode = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:7:11: error: expected ';' before 'quitMode'
boolean quitMode = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:8:13: error: 'selectedMenu' was not declared in this scope
PrintMenu(selectedMenu);
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:10:12: error: 'quitMode' was not declared in this scope
while (quitMode==false)
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:12:27: error: 'Buttons' was not declared in this scope
int buttons = Buttons();
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:36:26: error: 'SetTotalTime' was not declared in this scope
SetTotalTime();
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:44:13: error: 'delay' was not declared in this scope
delay(50);
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp: In function 'void PrintMenu(int)':
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:52:3: error: 'myOLED' was not declared in this scope
myOLED.clrScr();
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:53:18: error: 'SmallFont' was not declared in this scope
myOLED.setFont(SmallFont);
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:61:26: error: 'CENTER' was not declared in this scope
myOLED.print (ptr, CENTER, (x * vertSpace)+2);
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:66:25: error: 'CENTER' was not declared in this scope
myOLED.print(ptr, CENTER, (x * vertSpace)+2);
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp: In function 'void SetDateTime()':
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:74:3: error: 'boolean' was not declared in this scope
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:74:11: error: expected ';' before 'exitMenu'
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:76:10: error: 'exitMenu' was not declared in this scope
while (exitMenu==false)
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp: In function 'void SetTimeON()':
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:84:3: error: 'boolean' was not declared in this scope
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:84:11: error: expected ';' before 'exitMenu'
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:86:10: error: 'exitMenu' was not declared in this scope
while (exitMenu==false)
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp: In function 'void InfoScreen()':
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:94:3: error: 'boolean' was not declared in this scope
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:94:11: error: expected ';' before 'exitMenu'
boolean exitMenu = false;
^
C:\Users\theda\AppData\Local\Temp\buildc7147de8a2ebc35985cb35ed435f8800.tmp\sketch\menu.cpp:96:10: error: 'exitMenu' was not declared in this scope
while (exitMenu==false)
^
Utilisation de la bibliothèque OLED_I2C prise dans le dossier : C:\Users\theda\OneDrive\Documents\Arduino\libraries\OLED_I2C (legacy)
Utilisation de la bibliothèque DS3231 prise dans le dossier : C:\Users\theda\OneDrive\Documents\Arduino\libraries\DS3231 (legacy)
exit status 1
'exitMenu' was not declared in this scope