J'ai déporté cette fonction dans une librairie pour pouvoir la réutiliser dans différents projets.
Seulement j'aimerais que l'affectation du char *ssid et du char *pass se fasse dans le programme principal qui fera appel à la librairie.
J'ai donc mis les lignes suivantes dans mon main.cpp :
char *ssid[] = {"Livebox-1", "Livebox-2", "Livebox-3", "Livebox-4", "Livebox-5", "Livebox-6"};
char *pass[] = {"xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx", "xxxxxx"};
Seulement je ne sais pas comment passer ces 2 variables en paramètres de ma fonction connect(?, ?) que j'appelle dans le void setup() de mon main.cpp. Idem je ne sais pas quoi mettre comme définition de paramètres dans ma librairie pour ma fonction void connect(?, ?)
Merci Kamill pour ta réponse
OK pour la déclaration de la fonction void WIFI_Connect(int w, char *pssid[], char *ppass[]) dans ma librairie, mais comment tu ferais appel à cette fonction dans le setup() du main.cpp
J'avais essayé de mon côté ta première proposition et ça fonctionne.
Dans mon cas le w est interne à la fonction WIFI_Connect car elle teste les ssid les uns après les autres tant qu'elle n'arrive pas à se connecter.
Pour ton autre méthode dans mon cas ça serait ça ?
bigorne:
Je ne comprends pas trop la différence entre :
void WIFI_Connect(char *ss[], char *pwd[])
et
void WIFI_Connect(char *ss, char *pwd)
Dans le premier cas tu passes les tableaux -> tu détermines le ssid et password dans la fonction WIFI_Connect
Dans le deuxième cas tu passes directement le ssid et le password -> tu dois les avoir déterminés avant l'appel
Avant le #define SSID_COUNT (sizeof(ssid) / sizeof(ssid[0])) était dans le main.cpp juste apres la déclaration du tableau char *ssid[] et ça fonctionne bien avec SSID_COUNT = 6
Je souhaite effectuer cette action dans la fonction WIFI_Connect de ma librairie comme dans le code ci-dessus. Si je fais cela, j'obtiens SSID_COUNT = 1 car sizeof(ssid) = 4 et sizeof(ssid[0]) = 4
Dans ta définition de ta fonction WIFI_Connect, tu utilises des noms pour les paramètres formels qui sont les mêmes que ceux de tes tableaux globaux. Ce n'est pas une bonne pratique, car tu te fais des noeuds plus facilement !
Je te propose
Ce qui se passe avec ton code actuel, c'est qu'à l'intérieur de la fonction, le compilateur considère que ssid est le paramètre passé en argument, et non pas le tableau global (priorité aux arguments en cas de doute). Pareil pour pass. Et rien ne lui dit quelle est la taille de ces tableaux. D'où l'erreur.
De toutes façons tu peux placer ton #define SSID_COUNT en début de listing, ça n'amène rien de fonctionnel le cacher dans la fonction.
C'est normal car WIFI_Connect() ne connait pas la taille du tableau
Tu peux
soit déclarer la taille dans les paramètres de WIFI_Connect()
void WIFI_Connect(char *ssid[6], char *pass[6])
mais ce n'est pas très indiqué car WIFI_Connect ne pourra traiter que des tableaux de 6 éléments
soit passer la taille des tableaux à WIFI_Connect()
Bien que ce ne soit pas interdit il est déconseillé d'utiliser le mêmes noms dans les paramètres d'une fonction que le nom des variables globales. Ca prête à confusion.
Merci beaucoup pour vos réponses
Je vais corriger tout ça en passant la taille du tableau en paramètres et en changeant le noms de mes paramètres.
Merci