Bonsoir
J'ai fais quelque tests supplémentaires.
MenuItem m1(F("Demarrer"));
ne fonctionne pas en dehors d'une procédure. Il FAUT utiliser F() dans une procédure . Il faut donc deux lignes, une pour la déclaration en global et une pour l'initialisation avec F().
Ensuite, j'ai mis pleins de Serial.print() un peu partout qui affichent l'adresse pointeur de la chaîne de caractères. Déjà la BUG. les valeurs ne sont pas bonne. donc recherche d'où vient l'erreur.
en cherchant, je me suis rendu compte que ça venait de mon constructeur du menu
class MenuItem {
public:
MenuItem( void)
{
MenuItem(NULL, NULL);
}
MenuItem( __FlashStringHelper *itemName)
{
MenuItem(itemName, NULL);
}
MenuItem( __FlashStringHelper* itemName, void (*pt2Func) )
{
name=itemName;
if (itemName!=NULL ) Serial.print((unsigned int)name);
if (itemName!=NULL ) Serial.println(name);
pt2Fct=pt2Func;
before = right = after = left = 0;
}
protected:
__FlashStringHelper *name;
MenuItem *before;
MenuItem *right;
MenuItem *after;
MenuItem *left;
void (*pt2Fct); //pour la fonction quand USE
};
(Attention , extrait de code!)
Je faisais mon init avec la deuxième façon
m1 = MenuItem(F("Retardateur"));
j'ai fais un test pour tester directement la 3eme en faisant m2 = MenuItem(F("Intervallometre"),NULL);
Et la, ça fonctionne
mais je ne comprends pas pourquoi ?
Quelqu'un peut-il m'expliquer où est mon erreur?
Je reprends mon code principal pour voir si ça fonctionne mieux comme ça.
A+