merci du partage
il y a au moins un bug à regarder de près :
vous devriez mémoriser la taille du tableauAppui_ptr dans une variable de votre instance. Sinon quand vous faites
sizeof(tableauAppui_ptr) / sizeof(tableauAppui_ptr[0])
pour calculer le nombre d'éléments vous aurez un résultat qui ne correspond pas à ce que vous attendez, sauf pour la valeur par défaut qui est 2.
en effet tableauAppui_ptr est un pointeur donc sizeof(tableauAppui_ptr) c'est la taille occupée par un pointeur (2 ou 4 octets suivant si vous êtes sur un Arduino 8bits ou 32bits) et pas la taille du tableau
➜ dans la fonction modifTailleTabAppuis() il faut donc enregistrer son paramètre et c'est cela que vous utiliserez partout où vous aviez le calcul avec sizeof.
sinon quelques petites remarques qui se veulent constructives
On préfèrera ce qu'on appelle un "initializer list" pour le constructeur. (cf Initialization Lists in C++ - Cprogramming.com))
le constructeur devient alors:
tactileResistif4Broches::tactileResistif4Broches(byte A, byte B, byte C, byte D) :
X1(A), X2(B), Y1(C), Y2(D) {
modifTailleTabAppuis(0);
}
la fonction modifTailleTabAppuis() ne conserve pas les valeurs qui étaient dans le tableau s'il existait déjà. Je ne sais pas si c'est important ou pas.
Pour conserver le contenu et éviter le test pour faire free, vous pourriez utiliser realloc() au lieu de calloc() ce qui a pour effet d'optimiser la gestion du tas.
Et quand vous faites une comparaison, le résultat est une valeur de vérité donc pas la peine d'écrire
return (tableauAppui_ptr == NULL ? false : true);
il suffit de faire
return tableauAppui_ptr == nullptr ;
(et on préfère nullptr en C++)
la variable indicateur_nbr_tableauAppui n'a pas besoin d'être une variable d'instance. elle pourrait être juste une variable locale de la fonction actualiser()
la variable d'instance moyenne n'est jamais modifiée, autant en faire une constexpr qui serait static (variable de classe)
quand vous faites
digitalWrite(X1, LOW); //Désactivation de la résistance PULL-UP
Sur UNO ou MEGA effectivement quand vous passez une pin qui est en INPUT sur HIGH ou LOW, ça active ou désactive le pullup interne. Mais ce n'est pas garanti sur tous les µC et comme je vois dans le code un #ifdef __arm__ ça veut dire que vous voulez gérer autre chose que les AVR sans doute... sur ESP32 par exemple il y a la fonction esp_err_t gpio_pullup_dis(gpio_num_t gpio_num) pour désactiver un pullup (mais je crois que passer la pin en INPUT enlève le pullup aussi si je me souviens bien)
ce code
//Vérification si l'on appuie au bon endroit :
if ((Xmin != Xmax) and (Ymin != Ymax))
{
if ((Xmin < Xmax ? X < Xmin or X > Xmax : X > Xmin or X < Xmax)) tableauAppui_ptr[indicateur_nbr_tableauAppui] = false;
if ((Ymin < Ymax ? Y < Ymin or Y > Ymax : Y > Ymin or Y < Ymax)) tableauAppui_ptr[indicateur_nbr_tableauAppui] = false;
}
ne semble pas pertinent puisque vous n'affectez jamais les 4 variables Xmin, Xmax, Ymin et Ymax.
à quoi sert tactilePresse, il n'y a pas de fonction pour le lire ? c'est une variable public, on pourrait y accéder directement, mais ce n'est pas une très bonne pratique en Programmation objet
la boucle for
tactilePresse = true;
for (byte _i = 0; _i < moyenne; _i++) tactilePresse = (tabAppuis[_i] == false ? false : tactilePresse);
semble retourner false dès qu'un tabAppuis est false. vous pourriez faire un break donc dès que vous avez rencontré un false, pas la peine de faire toute la boucle (même si pour le moment moyenne c'est 1 donc la boucle ne boucle pas vraiment)
j'ai lu en diagonale donc il doit y avoir d'autres trucs à clarifier